【问题标题】:How to convert POSIX epoch seconds to EST/EDT time reliably, with pure functions如何使用纯函数可靠地将 POSIX 纪元秒转换为 EST/EDT 时间
【发布时间】:2016-03-15 02:21:19
【问题描述】:

我正在使用time-1.5.0.1 库。

我得到一个代表纪元秒的值,例如1449590820 等于 2015-12-08 11:07:00 -0500

使用Data.Time 模块,我希望能够将1449590820 转换为ZonedTime

我要使用的功能是这样的:

utcToZonedTime :: TimeZone -> UTCTime -> ZonedTime

问题是获取我需要的TimeZone 值。 Data.Time 中的可用函数要么依赖于从环境中获取 TimeZone,要么要求您为 EDTEST 显式构造 TimeZone

我想避免依赖环境给我一个ZonedTime,因为无法保证代码会在设置为美国东部时间的服务器上运行。所以使用这个功能是不可能的:

utcToLocalZonedTime :: UTCTime -> IO ZonedTime

因此,我可以选择自己构建必要的TimeZone 输入。

但是EDTTimeZoneESTTimeZone 不同,所以我需要不同的TimeZone,具体取决于夏令时是否有效。是否有一种简单的方法可以根据UTCTime 的值(即它是否属于夏令时)来生成EDTESTTimeZone

我想强调的是,我只想使用纯函数来完成这项工作。

也许我正在寻找 tzinfo library in Ruby 的 Haskell 模拟。

【问题讨论】:

  • 因此,您需要传递所需的时区和 UTC 日期时间值,并接收一个设置了时区的值小时调整为夏令时,基于你经过的区域?
  • @9000 我很高兴能够获得美国东部时区中任何 UTCTime 的夏令时调整的 TimeZone 值。
  • 粗略浏览资料让我认为该库假设 EDTEST 两个独立且不相关的时区,并且似乎没有 tzdata 具有的 DST 开始/结束信息.原始 tzdata 是 available 但仍然是原始的,
  • 是的,看来我正在寻找 Haskell 中的 tzdata/tzinfo 支持。
  • 我正在看这个:hackage.haskell.org/package/tz

标签: haskell time


【解决方案1】:

tz 包看起来可能符合要求,但不幸的是,它有 dependency build problems

【讨论】:

    【解决方案2】:

    timezone-series 包中的utcToLocalTime'timeZoneFromSeries 看起来已经开发用于完全涵盖这种情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-02
      • 2011-07-26
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      • 2012-03-08
      • 2015-05-14
      • 2023-04-09
      相关资源
      最近更新 更多