2015-12-09 7 views
5

私はtime-1.5.0.1ライブラリを使用しています。純粋な関数で確実にPOSIXエポック秒をEST/EDT時間に変換する方法

私は、エポック秒を表す値が与えられます。 14495908202015-12-08 11:07:00 -0500に等しい。

Data.Timeモジュールを使用して、1449590820ZonedTimeに変換したいと考えています。

utcToZonedTime :: TimeZone -> UTCTime -> ZonedTime 

問題は、私は必要TimeZone値を取得している:

私が使用したい機能がこれです。 Data.Timeの利用可能な機能は、環境からTimeZoneを取得するか、またはをEDTまたはESTに明示的に構成する必要があります。

米国東部時間に設定されたサーバーでコードが実行される保証はないので、私はZonedTimeを与えるために環境に応じて避けたいと考えています。したがって、この機能を使用することは問題外である:

utcToLocalZonedTime :: UTCTime -> IO ZonedTime 

だからそれは必要なTimeZone入力を自分で構築するオプションを私に残します。

しかしEDTためTimeZoneESTためTimeZoneと同じではありませんので、私は、夏時間が有効であるかどうかに応じて異なるTimeZoneを必要としています。 UTCTimeの値に応じてTimeZoneEDTまたはEST)を簡単に生成する方法はありますか(つまり、夏時間の範囲内にあるかどうか)。

純粋な関数を使用してこれを排他的に実行したいと強調したいと思います。

多分、私はtzinfo library in Rubyのハスケルアナログを探しています。

+0

希望するタイムゾーンとUTC日時の値を渡し、渡されたゾーンに基づいて、夏時間に合わせて_and_時間を設定した値を受け取りますか? – 9000

+0

@ 9000アメリカ東部時間帯のUTC時間の夏時間調整TimeZone値を取得できるだけで満足しています。 – dan

+1

私は、ソースからの見栄えがよく、図書館は「EDT」と「EST」の2つの別々の時間帯とは無関係で、DST開始/終了情報は表示されないと考えていました。[tzdata](https://en.wikipedia .org/wiki/Tz_database)があります。 Raw tzdataは利用可能ですが(https://hackage.haskell.org/package/tzdata)、生のままです。 – 9000

答えて

0

utcToLocalTime'およびtimeZoneFromSeriestimezone-seriesからのパッケージは、このシナリオを正確にカバーするように設計されています。

関連する問題