Есть простейший код:
import Data.Time.Clock.POSIX
import Data.Time.Clock
import Data.Time.Format
import Data.Time.LocalTime
import System.Locale
main = do
print $ zonedTimeToUTC t1
print $ zonedTimeToUTC t1'
t1 :: ZonedTime
t1 = readTime defaultTimeLocale
"%B %e %Y %l:%M%P %Z"
"March 8 2009 7:30pm EST"
t1' :: ZonedTime
t1' = readTime defaultTimeLocale
"%B %e %Y %l:%M%P %Z"
"March 8 2009 7:30pm MSK"
Выполняю и получаю:
*Main> main
2009-03-09 00:30:00 UTC
2009-03-08 19:30:00 UTC
Что за?… Модуль не умеет зоны разбирать стандартные? Если посмотреть внутрь t1', то видно, что:
*Main> zonedTimeZone t1'
MSK
*Main> zonedTimeToLocalTime t1'
2009-03-08 19:30:00
как и написано в документации http://hackage.haskell.org/package/time-1.4.2/docs/Data-Time-LocalTime.html#t...
Пробовал играться с http://hackage.haskell.org/package/timezone-series-0.1.3 — результат не изменился.
Интересно, где лыжи не едут и как получить корректный разбор часовых зон, отличных от тех, что в Америке живут?