调用Timex.to_naive_datetime以转换为不带时区的朴素日期时间将从输入日期时间中减去一小时
我试过其他时区,排除了夏令时转换的可能性。
d = %DateTime{
year: 2000,
month: 2,
day: 29,
zone_abbr: "CET",
hour: 23,
minute: 0,
second: 7,
microsecond: {0, 0},
utc_offset: 3600,
std_offset: 0,
time_zone: "Europe/Warsaw"
}
#=> # DateTime<2000-02-29 23:00:07+01:00 CET Europe/Warsaw>
Timex.to_naive_datetime(d)
#=> ~N[2000-02-29 22:00:07]
d2 = %DateTime{
year: 2019,
month: 3,
day: 2,
zone_abbr: "PST",
hour: 23,
minute: 0,
second: 7,
microsecond: {0, 0},
utc_offset: 3600,
std_offset: 0,
time_zone: "America/Los_Angeles"
}
#=> #DateTime<2019-03-02 23:00:07+01:00 PST America/Los_Angeles>
Timex.to_naive_datetime(d2)
#=> ~N[2019-03-02 22:00:07]我期望将第一个datetime转换为~N[2000-02-29 23:00:07],但输出为~N[2000-02-29 22:00:07]。
发布于 2019-09-13 09:02:36
您创建的两个结构都包含UTC+1的utc_offset: 3600。
#DateTime<2000-02-29 23:00:07+01:00 CET Europe/Warsaw>
#DateTime<2019-03-02 23:00:07+01:00 PST America/Los_Angeles>America/Los_Angeles的+01:00是如何实现的呢?它对该时区无效。如果我使用以下标准函数之一生成日期:
d3 = Timex.to_datetime({{2019,3, 2}, {23, 0, 7}}, "America/Los_Angeles")
#=> #DateTime<2019-03-02 23:00:07-08:00 PST America/Los_Angeles>
Timex.to_naive_datetime(d3)
#=> ~N[2019-03-03 07:00:07]我得到了正确的时区偏移量。Timex.to_naive_datetime/1似乎返回了时区的UTC值。如果只想删除时区信息,可以使用DateTime.to_naive/1
d1
#=> #DateTime<2000-02-29 23:00:07+01:00 CET Europe/Warsaw>
DateTime.to_naive(d1)
#=> ~N[2000-02-29 23:00:07]https://stackoverflow.com/questions/57911822
复制相似问题