首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Timex.to_naive_datetime减去一个小时

Timex.to_naive_datetime减去一个小时
EN

Stack Overflow用户
提问于 2019-09-13 01:28:25
回答 1查看 169关注 0票数 0

调用Timex.to_naive_datetime以转换为不带时区的朴素日期时间将从输入日期时间中减去一小时

我试过其他时区,排除了夏令时转换的可能性。

代码语言:javascript
复制
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]

EN

回答 1

Stack Overflow用户

发布于 2019-09-13 09:02:36

您创建的两个结构都包含UTC+1的utc_offset: 3600

代码语言:javascript
复制
#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是如何实现的呢?它对该时区无效。如果我使用以下标准函数之一生成日期:

代码语言:javascript
复制
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

代码语言:javascript
复制
d1
#=> #DateTime<2000-02-29 23:00:07+01:00 CET Europe/Warsaw>
DateTime.to_naive(d1)
#=> ~N[2000-02-29 23:00:07]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57911822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档