如何用逗号映射 Postgres Rails timestampz 数组

问题描述 投票:0回答:1

目标是从数据的日期时间中去除日期,以便可以使用 Chartkick 叠加多天。 Ruby 将逗号解释为字段之间的分隔符。 Rails 和 Chartkick 可能没有问题,因为它们是“timestamptz”数据类型。带有 PG 时区的时间戳。

day_one_array = [
[Thu, 28 Dec 2023 00:00:00.000000000 PST -08:00, 0.0],
[Thu, 28 Dec 2023 01:00:00.000000000 PST -08:00, 0.0],
<snip>
[Thu, 28 Dec 2023 21:00:00.000000000 PST -08:00, 0.0], 
[Thu, 28 Dec 2023 22:00:00.000000000 PST -08:00, 0.0], 
[Thu, 28 Dec 2023 23:00:00.000000000 PST -08:00, 0.0]]

puts day_one_array.each { |x| puts x }

parsing_daily_data.rb:2: syntax error, unexpected constant, expecting ']'
  [Thu, 28 Dec 2023 00:00:00.000000000 PST ...

有关如何使用 Ruby 或更直接在 Rails 中处理此问题的任何建议。使用 timestampz 数据具有挑战性,因为数据会根据其查看方式而重新格式化。在 PGAdmin 中,相同的数据显示为

'2022-12-05 08:00:00-08'
。报价来来去去。尝试从时间戳到字符串来回转换非常具有挑战性。

ruby-on-rails postgresql mapping timestamp-with-timezone
1个回答
0
投票

尝试从时间戳到字符串来回转换是非常具有挑战性的

在 PostgreSQL 中则不然;使用

to_char()
格式掩码 出路,
to_timestamp()
入路:

create table my_timestamptz (tstz timestamptz);

insert into my_timestamptz
select to_timestamp('Thu, 28 Dec 2023 00:00:00.000000000 PST -08:00, 0.0',
                    'Dy, DD Mon YYYY HH24:MI:SS.US AAA TZH:TZM, AAA')
returning *;
tstz
2023-12-28 08:00:00+00
set timezone='PST8PDT';
select to_char(tstz,
               'Dy, DD Mon YYYY HH24:MI:SS.US TZ TZH:TZM, 0.0') 
from my_timestamptz;
to_char
2023 年 12 月 28 日星期四 00:00:00.000000 PST -08:00, 0.0

db<>fiddle 的演示

© www.soinside.com 2019 - 2024. All rights reserved.