-- Copyright (c) 2016-present, Facebook, Inc. -- All rights reserved. -- -- This source code is licensed under the BSD-style license found in the -- LICENSE file in the root directory of this source tree. An additional grant -- of patent rights can be found in the PATENTS file in the same directory. {-# LANGUAGE OverloadedStrings #-} module Duckling.Time.TimeZone.Parse ( parseTimezone ) where import Data.HashMap.Strict (HashMap) import qualified Data.HashMap.Strict as HashMap import Data.String import Data.Text (Text) import Data.Time (TimeZone(..)) import Prelude -- `TimeZone` reads anything but only accepts timezones known -- from the provided locale. parseTimezone :: Text -> Maybe TimeZone parseTimezone x = HashMap.lookup x tzs tzs :: HashMap Text TimeZone tzs = HashMap.fromList [ ( "YEKT", TimeZone 300 False "YEKT" ) , ( "YEKST", TimeZone 360 True "YEKST" ) , ( "YAKT", TimeZone 540 False "YAKT" ) , ( "YAKST", TimeZone 600 True "YAKST" ) , ( "WITA", TimeZone 480 False "WITA" ) , ( "WIT", TimeZone 420 False "WIT" ) , ( "WIB", TimeZone 420 False "WIB" ) , ( "WGT", TimeZone (-180) False "WGT" ) , ( "WGST", TimeZone (-120) True "WGST" ) , ( "WFT", TimeZone 720 False "WFT" ) , ( "WET", TimeZone 0 False "WET" ) , ( "WEST", TimeZone 60 True "WEST" ) , ( "WAT", TimeZone 60 False "WAT" ) , ( "WAST", TimeZone 120 True "WAST" ) , ( "VUT", TimeZone 660 False "VUT" ) , ( "VLAT", TimeZone 660 False "VLAT" ) , ( "VLAST", TimeZone 660 True "VLAST" ) , ( "VET", TimeZone (-270) False "VET" ) , ( "UZT", TimeZone 300 False "UZT" ) , ( "UYT", TimeZone (-180) False "UYT" ) , ( "UYST", TimeZone (-120) True "UYST" ) , ( "UTC", TimeZone 0 False "UTC" ) , ( "ULAT", TimeZone 480 False "ULAT" ) , ( "TVT", TimeZone 720 False "TVT" ) , ( "TMT", TimeZone 300 False "TMT" ) , ( "TLT", TimeZone 540 False "TLT" ) , ( "TKT", TimeZone 780 False "TKT" ) , ( "TJT", TimeZone 300 False "TJT" ) , ( "TFT", TimeZone 300 False "TFT" ) , ( "TAHT", TimeZone (-600) False "TAHT" ) , ( "SST", TimeZone (-660) False "SST" ) , ( "SRT", TimeZone (-180) False "SRT" ) , ( "SGT", TimeZone 480 False "SGT" ) , ( "SCT", TimeZone 240 False "SCT" ) , ( "SBT", TimeZone 660 False "SBT" ) , ( "SAST", TimeZone 120 False "SAST" ) , ( "SAMT", TimeZone 300 False "SAMT" ) , ( "RET", TimeZone 240 False "RET" ) , ( "PYT", TimeZone (-240) False "PYT" ) , ( "PYST", TimeZone (-180) True "PYST" ) , ( "PWT", TimeZone (-420) True "PWT" ) , ( "PST", TimeZone (-480) False "PST" ) , ( "PONT", TimeZone 660 False "PONT" ) , ( "PMST", TimeZone (-180) False "PMST" ) , ( "PMDT", TimeZone (-120) True "PMDT" ) , ( "PKT", TimeZone 300 False "PKT" ) , ( "PHT", TimeZone 480 False "PHT" ) , ( "PHOT", TimeZone 780 False "PHOT" ) , ( "PGT", TimeZone 600 False "PGT" ) , ( "PETT", TimeZone 720 False "PETT" ) , ( "PETST", TimeZone 720 True "PETST" ) , ( "PET", TimeZone (-300) False "PET" ) , ( "PDT", TimeZone (-420) False "PDT" ) , ( "OMST", TimeZone 360 False "OMST" ) , ( "OMSST", TimeZone 420 True "OMSST" ) , ( "NZST", TimeZone 720 False "NZST" ) , ( "NZDT", TimeZone 780 False "NZDT" ) , ( "NUT", TimeZone (-660) False "NUT" ) , ( "NST", TimeZone (-660) False "NST" ) , ( "NPT", TimeZone (-600) True "NPT" ) , ( "NOVT", TimeZone 360 False "NOVT" ) , ( "NOVST", TimeZone 420 True "NOVST" ) , ( "NFT", TimeZone 690 False "NFT" ) , ( "NDT", TimeZone (-150) True "NDT" ) , ( "NCT", TimeZone 660 False "NCT" ) , ( "MYT", TimeZone 480 False "MYT" ) , ( "MVT", TimeZone 300 False "MVT" ) , ( "MUT", TimeZone 240 False "MUT" ) , ( "MST", TimeZone (-420) False "MST" ) , ( "MSK", TimeZone 180 False "MSK" ) , ( "MSD", TimeZone 240 True "MSD" ) , ( "MMT", TimeZone 390 False "MMT" ) , ( "MHT", TimeZone 720 False "MHT" ) , ( "MDT", TimeZone (-360) True "MDT" ) , ( "MAWT", TimeZone 300 False "MAWT" ) , ( "MART", TimeZone (-570) False "MART" ) , ( "MAGT", TimeZone 600 False "MAGT" ) , ( "MAGST", TimeZone 720 True "MAGST" ) , ( "LINT", TimeZone 840 False "LINT" ) , ( "LHST", TimeZone 630 False "LHST" ) , ( "LHDT", TimeZone 660 True "LHDT" ) , ( "KUYT", TimeZone 180 False "KUYT" ) , ( "KST", TimeZone 540 False "KST" ) , ( "KRAT", TimeZone 420 False "KRAT" ) , ( "KRAST", TimeZone 480 True "KRAST" ) , ( "KGT", TimeZone 360 False "KGT" ) , ( "JST", TimeZone 540 False "JST" ) , ( "IST", TimeZone 120 False "IST" ) , ( "IRST", TimeZone 210 False "IRST" ) , ( "IRKT", TimeZone 480 False "IRKT" ) , ( "IRKST", TimeZone 540 True "IRKST" ) , ( "IRDT", TimeZone 270 True "IRDT" ) , ( "IOT", TimeZone 360 False "IOT" ) , ( "IDT", TimeZone 180 True "IDT" ) , ( "ICT", TimeZone 420 False "ICT" ) , ( "HOVT", TimeZone 420 False "HOVT" ) , ( "HKT", TimeZone 480 False "HKT" ) , ( "GYT", TimeZone (-240) False "GYT" ) , ( "GST", TimeZone 240 False "GST" ) , ( "GMT", TimeZone 0 False "GMT" ) , ( "GILT", TimeZone 720 False "GILT" ) , ( "GFT", TimeZone (-180) False "GFT" ) , ( "GET", TimeZone 240 False "GET" ) , ( "GAMT", TimeZone (-540) False "GAMT" ) , ( "GALT", TimeZone (-360) False "GALT" ) , ( "FNT", TimeZone (-120) False "FNT" ) , ( "FKT", TimeZone (-240) False "FKT" ) , ( "FKST", TimeZone (-180) False "FKST" ) , ( "FJT", TimeZone 720 False "FJT" ) , ( "FJST", TimeZone 780 True "FJST" ) , ( "EST", TimeZone (-300) False "EST" ) , ( "EGT", TimeZone (-60) False "EGT" ) , ( "EGST", TimeZone 0 True "EGST" ) , ( "EET", TimeZone 120 False "EET" ) , ( "EEST", TimeZone 180 True "EEST" ) , ( "EDT", TimeZone (-240) True "EDT" ) , ( "ECT", TimeZone (-300) False "ECT" ) , ( "EAT", TimeZone 180 False "EAT" ) , ( "EAST", TimeZone (-300) False "EAST" ) , ( "EASST", TimeZone (-300) True "EASST" ) , ( "DAVT", TimeZone 420 False "DAVT" ) , ( "ChST", TimeZone 600 False "ChST" ) , ( "CXT", TimeZone 420 False "CXT" ) , ( "CVT", TimeZone (-60) False "CVT" ) , ( "CST", TimeZone (-360) False "CST" ) , ( "COT", TimeZone (-300) False "COT" ) , ( "CLT", TimeZone (-180) False "CLT" ) , ( "CLST", TimeZone (-180) True "CLST" ) , ( "CKT", TimeZone (-600) False "CKT" ) , ( "CHAST", TimeZone 765 False "CHAST" ) , ( "CHADT", TimeZone 825 True "CHADT" ) , ( "CET", TimeZone 60 False "CET" ) , ( "CEST", TimeZone 120 True "CEST" ) , ( "CDT", TimeZone 540 True "CDT" ) , ( "CCT", TimeZone 390 False "CCT" ) , ( "CAT", TimeZone 120 False "CAT" ) , ( "CAST", TimeZone 180 True "CAST" ) , ( "BTT", TimeZone 360 False "BTT" ) , ( "BST", TimeZone (-660) False "BST" ) , ( "BRT", TimeZone (-180) False "BRT" ) , ( "BRST", TimeZone (-120) True "BRST" ) , ( "BOT", TimeZone (-240) False "BOT" ) , ( "BNT", TimeZone 480 False "BNT" ) , ( "AZT", TimeZone 240 False "AZT" ) , ( "AZST", TimeZone 300 True "AZST" ) , ( "AZOT", TimeZone (-60) False "AZOT" ) , ( "AZOST", TimeZone 0 True "AZOST" ) , ( "AWST", TimeZone 480 False "AWST" ) , ( "AWDT", TimeZone 540 True "AWDT" ) , ( "AST", TimeZone (-240) False "AST" ) , ( "ART", TimeZone (-180) False "ART" ) , ( "AQTT", TimeZone 300 False "AQTT" ) , ( "ANAT", TimeZone 720 False "ANAT" ) , ( "ANAST", TimeZone 720 True "ANAST" ) , ( "AMT", TimeZone 240 False "AMT" ) , ( "AMST", TimeZone 300 True "AMST" ) , ( "ALMT", TimeZone 360 False "ALMT" ) , ( "AKST", TimeZone (-540) False "AKST" ) , ( "AKDT", TimeZone (-480) True "AKDT" ) , ( "AFT", TimeZone 270 False "AFT" ) , ( "AEST", TimeZone 600 False "AEST" ) , ( "AEDT", TimeZone 660 True "AEDT" ) , ( "ADT", TimeZone (-180) True "ADT" ) , ( "ACST", TimeZone 570 False "ACST" ) , ( "ACDT", TimeZone 630 True "ACDT" ) ]