我正在使用 PostegreSQL 在 Rails 中创建一个时隙表,其中包含如下列
slots
name | type
-----|-----
day | date
hour | int
min | int
小时会像 11, 12, 13, 14 ...
min 可以是 0, 5, 10, 15 ...
我正在尝试使用这三列并创建一个时间戳,以便与 Time.now
进行比较以提取 future 即将到来的记录。
由于 PG 的 to_timestamp
函数使用 UTC 作为默认时区创建时间戳,我想从三列创建时间以使用服务器的时区,我的尝试如下。
Slot.select("
to_timestamp(
concat_ws(
' ',
day::text,
concat_ws(
':',
hour::text,
min::text),
'#{Time.now.zone}'),
'YYYY-MM-DD HH24:MI (TZ)')
AS t")
它给了我错误:
PG::FeatureNotSupported:错误:to_date 不支持“TZ”/“tz”/“OF”格式模式
任何建议或想法都会很棒。
谢谢
最佳答案
to_timestamp()
函数返回一个带时区的时间戳
值。如果您没有明确指定时区,则使用服务器的时区。这似乎就是您所需要的全部,因此您可以安全地忘记指定简单日期和时间以外的任何内容。
但是,看看您要做什么,使用 the make_time()
function and add the resulting time
to the day date
to get the timestamp
会容易得多你需要。这为您节省了大量转换为 text
然后返回为 timestamp
的操作:
Slot.select("day + make_time(hour, min, 0.0::float) AS t");
关于ruby-on-rails - PostgreSQL 合并列并转换为具有本地时区的时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32981764/