Ich verwende die time-1.5.0.1
-Bibliothek.So konvertieren Sie POSIX-Epochensekunden zuverlässig in EST/EDT-Zeit, mit reinen Funktionen
Ich habe einen Wert gegeben, der Epochensekunden darstellt, z. 1449590820
was entspricht 2015-12-08 11:07:00 -0500
.
Mit Data.Time Module, ich möchte 1449590820
zu einem ZonedTime
konvertieren können.
Die Funktion ich verwenden möchte, ist dies:
utcToZonedTime :: TimeZone -> UTCTime -> ZonedTime
Das Problem der TimeZone
Wert wird immer ich brauche. Die verfügbaren Funktionen in hängen entweder davon ab, die TimeZone
aus der Umgebung zu erhalten, oder erfordern, dass Sie explizit eine TimeZone
für EDT
oder erstellen.
Ich möchte je nach Umgebung vermeiden, mir ZonedTime
zu geben, weil es keine Garantie gibt, dass der Code auf einem Server ausgeführt wird, der auf die US Eastern Time eingestellt ist. So mit dieser Funktion ist aus der Frage:
utcToLocalZonedTime :: UTCTime -> IO ZonedTime
Damit lässt mich mit der Möglichkeit des Aufbaus der notwendigen TimeZone
Eingang selbst.
Aber die TimeZone
für EDT
ist nicht das gleiche wie die TimeZone
für EST
, so brauche ich eine anderes TimeZone
je nachdem, ob in der Tat Tageslichtsparungen ist. Gibt es eine einfache Möglichkeit, eine TimeZone
von EDT
oder abhängig von dem Wert einer UTCTime
zu generieren (d. H. Ob es innerhalb der Sommerzeit liegt)?
Ich möchte betonen, dass ich dies ausschließlich mit reinen Funktionen tun möchte.
Vielleicht suche ich nach einem Haskell-Analog zur tzinfo library in Ruby.
Sie möchten also die gewünschte Zeitzone und einen UTC-Datetime-Wert übergeben und erhalten einen Wert mit der für die Sommerzeit angepassten Zeitzone _und_Stunden, basierend auf der Zone, die Sie bestanden haben? – 9000
@ 9000 Ich würde mich freuen, wenn ich nur den für die Sommerzeit angepassten TimeZone-Wert für jede UTCTime in der Eastern Time Zone der USA erhalten könnte. – dan
Ein flüchtiger Blick durch Quellen ließ mich denken, dass die Bibliothek "EDT" und "EST" zwei getrennte und nicht verwandte Zeitzonen annimmt, und scheint nicht die DST Start/End Info zu haben, die [tzdata] (https: //en.wikipedia .org/wiki/Tz_database) hat. Raw tzdata sind [verfügbar] (https://hackage.haskell.org/package/tzdata), aber immer noch roh, – 9000