如何使用纯函数可靠地将POSIX epoch秒转换为EST/EDT时间

dan*_*dan 6 time haskell

我正在使用time-1.5.0.1图书馆.

我给出了代表纪元秒的值,例如1449590820等于2015-12-08 11:07:00 -0500.

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

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

utcToZonedTime :: TimeZone -> UTCTime -> ZonedTime
Run Code Online (Sandbox Code Playgroud)

问题在于获得TimeZone我需要的价值.可用的函数Data.Time取决于TimeZone从环境中获取或要求您显式构造TimeZonefor EDTEST.

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

utcToLocalZonedTime :: UTCTime -> IO ZonedTime
Run Code Online (Sandbox Code Playgroud)

这样我就可以选择TimeZone自己构建必要的输入.

但是,TimeZone对于EDT不一样TimeZoneEST,所以我需要一个不同TimeZone取决于夏令是否有效.有一个简单的方法来产生TimeZoneEDTEST取决于a的值UTCTime(即它是否属于夏令时的时间内)?

我想强调一点,我只想使用纯函数来做这件事.

也许我正在寻找一个Haskell模拟Ruby中tzinfo库.

dan*_*dan 0

tz包看起来可能符合要求,但不幸的是,它存在依赖构建问题