Private/ConvertTo-LMSDTEpochMillis.ps1

$Script:IANAtoWindows = @{
    'Etc/GMT+12'                       = 'Dateline Standard Time'
    'Etc/GMT+11'                       = 'UTC-11'
    'Pacific/Pago_Pago'                = 'UTC-11'
    'Pacific/Niue'                     = 'UTC-11'
    'Pacific/Midway'                   = 'UTC-11'
    'America/Adak'                     = 'Aleutian Standard Time'
    'Pacific/Honolulu'                 = 'Hawaiian Standard Time'
    'Pacific/Rarotonga'                = 'Hawaiian Standard Time'
    'Pacific/Tahiti'                   = 'Hawaiian Standard Time'
    'Pacific/Johnston'                 = 'Hawaiian Standard Time'
    'Etc/GMT+10'                       = 'Hawaiian Standard Time'
    'Pacific/Marquesas'                = 'Marquesas Standard Time'
    'America/Anchorage'                = 'Alaskan Standard Time'
    'America/Juneau'                   = 'Alaskan Standard Time'
    'America/Metlakatla'               = 'Alaskan Standard Time'
    'America/Nome'                     = 'Alaskan Standard Time'
    'America/Sitka'                    = 'Alaskan Standard Time'
    'America/Yakutat'                  = 'Alaskan Standard Time'
    'Etc/GMT+9'                        = 'UTC-09'
    'Pacific/Gambier'                  = 'UTC-09'
    'America/Tijuana'                  = 'Pacific Standard Time (Mexico)'
    'America/Santa_Isabel'             = 'Pacific Standard Time (Mexico)'
    'Etc/GMT+8'                        = 'UTC-08'
    'Pacific/Pitcairn'                 = 'UTC-08'
    'America/Los_Angeles'              = 'Pacific Standard Time'
    'America/Vancouver'                = 'Pacific Standard Time'
    'America/Dawson'                   = 'Pacific Standard Time'
    'America/Whitehorse'               = 'Pacific Standard Time'
    'PST8PDT'                          = 'Pacific Standard Time'
    'America/Phoenix'                  = 'US Mountain Standard Time'
    'America/Dawson_Creek'             = 'US Mountain Standard Time'
    'America/Creston'                  = 'US Mountain Standard Time'
    'America/Fort_Nelson'              = 'US Mountain Standard Time'
    'America/Hermosillo'               = 'US Mountain Standard Time'
    'Etc/GMT+7'                        = 'US Mountain Standard Time'
    'America/Chihuahua'                = 'Mountain Standard Time (Mexico)'
    'America/Mazatlan'                 = 'Mountain Standard Time (Mexico)'
    'America/Denver'                   = 'Mountain Standard Time'
    'America/Edmonton'                 = 'Mountain Standard Time'
    'America/Cambridge_Bay'            = 'Mountain Standard Time'
    'America/Inuvik'                   = 'Mountain Standard Time'
    'America/Yellowknife'              = 'Mountain Standard Time'
    'America/Ojinaga'                  = 'Mountain Standard Time'
    'America/Boise'                    = 'Mountain Standard Time'
    'MST7MDT'                          = 'Mountain Standard Time'
    'America/Guatemala'                = 'Central America Standard Time'
    'America/Belize'                   = 'Central America Standard Time'
    'America/Costa_Rica'               = 'Central America Standard Time'
    'Pacific/Galapagos'                = 'Central America Standard Time'
    'America/Tegucigalpa'              = 'Central America Standard Time'
    'America/Managua'                  = 'Central America Standard Time'
    'America/El_Salvador'              = 'Central America Standard Time'
    'Etc/GMT+6'                        = 'Central America Standard Time'
    'America/Chicago'                  = 'Central Standard Time'
    'America/Winnipeg'                 = 'Central Standard Time'
    'America/Rainy_River'              = 'Central Standard Time'
    'America/Rankin_Inlet'             = 'Central Standard Time'
    'America/Resolute'                 = 'Central Standard Time'
    'America/Matamoros'                = 'Central Standard Time'
    'America/Indiana/Knox'             = 'Central Standard Time'
    'America/Indiana/Tell_City'        = 'Central Standard Time'
    'America/Menominee'                = 'Central Standard Time'
    'America/North_Dakota/Beulah'      = 'Central Standard Time'
    'America/North_Dakota/Center'      = 'Central Standard Time'
    'America/North_Dakota/New_Salem'   = 'Central Standard Time'
    'CST6CDT'                          = 'Central Standard Time'
    'Pacific/Easter'                   = 'Easter Island Standard Time'
    'America/Mexico_City'              = 'Central Standard Time (Mexico)'
    'America/Bahia_Banderas'           = 'Central Standard Time (Mexico)'
    'America/Merida'                   = 'Central Standard Time (Mexico)'
    'America/Monterrey'                = 'Central Standard Time (Mexico)'
    'America/Regina'                   = 'Canada Central Standard Time'
    'America/Swift_Current'            = 'Canada Central Standard Time'
    'America/Bogota'                   = 'SA Pacific Standard Time'
    'America/Rio_Branco'               = 'SA Pacific Standard Time'
    'America/Eirunepe'                 = 'SA Pacific Standard Time'
    'America/Coral_Harbour'            = 'SA Pacific Standard Time'
    'America/Guayaquil'                = 'SA Pacific Standard Time'
    'America/Jamaica'                  = 'SA Pacific Standard Time'
    'America/Cayman'                   = 'SA Pacific Standard Time'
    'America/Panama'                   = 'SA Pacific Standard Time'
    'America/Lima'                     = 'SA Pacific Standard Time'
    'Etc/GMT+5'                        = 'SA Pacific Standard Time'
    'America/Cancun'                   = 'Eastern Standard Time (Mexico)'
    'America/New_York'                 = 'Eastern Standard Time'
    'America/Nassau'                   = 'Eastern Standard Time'
    'America/Toronto'                  = 'Eastern Standard Time'
    'America/Iqaluit'                  = 'Eastern Standard Time'
    'America/Montreal'                 = 'Eastern Standard Time'
    'America/Nipigon'                  = 'Eastern Standard Time'
    'America/Pangnirtung'              = 'Eastern Standard Time'
    'America/Thunder_Bay'              = 'Eastern Standard Time'
    'America/Detroit'                  = 'Eastern Standard Time'
    'America/Indiana/Petersburg'       = 'Eastern Standard Time'
    'America/Indiana/Vincennes'        = 'Eastern Standard Time'
    'America/Indiana/Winamac'          = 'Eastern Standard Time'
    'America/Kentucky/Monticello'      = 'Eastern Standard Time'
    'America/Louisville'               = 'Eastern Standard Time'
    'EST5EDT'                          = 'Eastern Standard Time'
    'America/Port-au-Prince'           = 'Haiti Standard Time'
    'America/Havana'                   = 'Cuba Standard Time'
    'America/Indianapolis'             = 'US Eastern Standard Time'
    'America/Indiana/Indianapolis'     = 'US Eastern Standard Time'
    'America/Indiana/Marengo'          = 'US Eastern Standard Time'
    'America/Indiana/Vevay'            = 'US Eastern Standard Time'
    'America/Grand_Turk'               = 'Turks And Caicos Standard Time'
    'America/Asuncion'                 = 'Paraguay Standard Time'
    'America/Halifax'                  = 'Atlantic Standard Time'
    'Atlantic/Bermuda'                 = 'Atlantic Standard Time'
    'America/Glace_Bay'                = 'Atlantic Standard Time'
    'America/Goose_Bay'                = 'Atlantic Standard Time'
    'America/Moncton'                  = 'Atlantic Standard Time'
    'America/Thule'                    = 'Atlantic Standard Time'
    'America/Caracas'                  = 'Venezuela Standard Time'
    'America/Cuiaba'                   = 'Central Brazilian Standard Time'
    'America/Campo_Grande'             = 'Central Brazilian Standard Time'
    'America/La_Paz'                   = 'SA Western Standard Time'
    'America/Antigua'                  = 'SA Western Standard Time'
    'America/Anguilla'                 = 'SA Western Standard Time'
    'America/Aruba'                    = 'SA Western Standard Time'
    'America/Barbados'                 = 'SA Western Standard Time'
    'America/St_Barthelemy'            = 'SA Western Standard Time'
    'America/Kralendijk'               = 'SA Western Standard Time'
    'America/Manaus'                   = 'SA Western Standard Time'
    'America/Boa_Vista'                = 'SA Western Standard Time'
    'America/Porto_Velho'              = 'SA Western Standard Time'
    'America/Blanc-Sablon'             = 'SA Western Standard Time'
    'America/Curacao'                  = 'SA Western Standard Time'
    'America/Dominica'                 = 'SA Western Standard Time'
    'America/Santo_Domingo'            = 'SA Western Standard Time'
    'America/Grenada'                  = 'SA Western Standard Time'
    'America/Guadeloupe'               = 'SA Western Standard Time'
    'America/Guyana'                   = 'SA Western Standard Time'
    'America/St_Kitts'                 = 'SA Western Standard Time'
    'America/St_Lucia'                 = 'SA Western Standard Time'
    'America/Marigot'                  = 'SA Western Standard Time'
    'America/Martinique'               = 'SA Western Standard Time'
    'America/Montserrat'               = 'SA Western Standard Time'
    'America/Puerto_Rico'              = 'SA Western Standard Time'
    'America/Lower_Princes'            = 'SA Western Standard Time'
    'America/Port_of_Spain'            = 'SA Western Standard Time'
    'America/St_Vincent'               = 'SA Western Standard Time'
    'America/Tortola'                  = 'SA Western Standard Time'
    'America/St_Thomas'                = 'SA Western Standard Time'
    'Etc/GMT+4'                        = 'SA Western Standard Time'
    'America/Santiago'                 = 'Pacific SA Standard Time'
    'America/St_Johns'                 = 'Newfoundland Standard Time'
    'America/Araguaina'                = 'Tocantins Standard Time'
    'America/Sao_Paulo'                = 'E. South America Standard Time'
    'America/Cayenne'                  = 'SA Eastern Standard Time'
    'Antarctica/Rothera'               = 'SA Eastern Standard Time'
    'Antarctica/Palmer'                = 'SA Eastern Standard Time'
    'America/Fortaleza'                = 'SA Eastern Standard Time'
    'America/Belem'                    = 'SA Eastern Standard Time'
    'America/Maceio'                   = 'SA Eastern Standard Time'
    'America/Recife'                   = 'SA Eastern Standard Time'
    'America/Santarem'                 = 'SA Eastern Standard Time'
    'Atlantic/Stanley'                 = 'SA Eastern Standard Time'
    'America/Paramaribo'               = 'SA Eastern Standard Time'
    'Etc/GMT+3'                        = 'SA Eastern Standard Time'
    'America/Buenos_Aires'             = 'Argentina Standard Time'
    'America/Argentina/Buenos_Aires'   = 'Argentina Standard Time'
    'America/Argentina/La_Rioja'       = 'Argentina Standard Time'
    'America/Argentina/Rio_Gallegos'   = 'Argentina Standard Time'
    'America/Argentina/Salta'          = 'Argentina Standard Time'
    'America/Argentina/San_Juan'       = 'Argentina Standard Time'
    'America/Argentina/San_Luis'       = 'Argentina Standard Time'
    'America/Argentina/Tucuman'        = 'Argentina Standard Time'
    'America/Argentina/Ushuaia'        = 'Argentina Standard Time'
    'America/Catamarca'                = 'Argentina Standard Time'
    'America/Cordoba'                  = 'Argentina Standard Time'
    'America/Jujuy'                    = 'Argentina Standard Time'
    'America/Mendoza'                  = 'Argentina Standard Time'
    'America/Godthab'                  = 'Greenland Standard Time'
    'America/Nuuk'                     = 'Greenland Standard Time'
    'America/Montevideo'               = 'Montevideo Standard Time'
    'America/Punta_Arenas'             = 'Magallanes Standard Time'
    'America/Miquelon'                 = 'Saint Pierre Standard Time'
    'America/Bahia'                    = 'Bahia Standard Time'
    'Etc/GMT+2'                        = 'UTC-02'
    'America/Noronha'                  = 'UTC-02'
    'Atlantic/South_Georgia'           = 'UTC-02'
    'Atlantic/Azores'                  = 'Azores Standard Time'
    'America/Scoresbysund'             = 'Azores Standard Time'
    'Atlantic/Cape_Verde'              = 'Cape Verde Standard Time'
    'Etc/GMT+1'                        = 'Cape Verde Standard Time'
    'Etc/GMT'                          = 'UTC'
    'America/Danmarkshavn'             = 'UTC'
    'Etc/UTC'                          = 'UTC'
    'UTC'                              = 'UTC'
    'Europe/London'                    = 'GMT Standard Time'
    'Atlantic/Canary'                  = 'GMT Standard Time'
    'Atlantic/Faeroe'                  = 'GMT Standard Time'
    'Atlantic/Faroe'                   = 'GMT Standard Time'
    'Europe/Guernsey'                  = 'GMT Standard Time'
    'Europe/Dublin'                    = 'GMT Standard Time'
    'Europe/Isle_of_Man'               = 'GMT Standard Time'
    'Europe/Jersey'                    = 'GMT Standard Time'
    'Europe/Lisbon'                    = 'GMT Standard Time'
    'Atlantic/Madeira'                 = 'GMT Standard Time'
    'Atlantic/Reykjavik'               = 'Greenwich Standard Time'
    'Africa/Ouagadougou'               = 'Greenwich Standard Time'
    'Africa/Abidjan'                   = 'Greenwich Standard Time'
    'Africa/Accra'                     = 'Greenwich Standard Time'
    'Africa/Banjul'                    = 'Greenwich Standard Time'
    'Africa/Conakry'                   = 'Greenwich Standard Time'
    'Africa/Bissau'                    = 'Greenwich Standard Time'
    'Africa/Monrovia'                  = 'Greenwich Standard Time'
    'Africa/Bamako'                    = 'Greenwich Standard Time'
    'Africa/Nouakchott'                = 'Greenwich Standard Time'
    'Atlantic/St_Helena'               = 'Greenwich Standard Time'
    'Africa/Freetown'                  = 'Greenwich Standard Time'
    'Africa/Dakar'                     = 'Greenwich Standard Time'
    'Africa/Lome'                      = 'Greenwich Standard Time'
    'Africa/Sao_Tome'                  = 'Sao Tome Standard Time'
    'Africa/Casablanca'                = 'Morocco Standard Time'
    'Africa/El_Aaiun'                  = 'Morocco Standard Time'
    'Europe/Berlin'                    = 'W. Europe Standard Time'
    'Europe/Andorra'                   = 'W. Europe Standard Time'
    'Europe/Vienna'                    = 'W. Europe Standard Time'
    'Europe/Zurich'                    = 'W. Europe Standard Time'
    'Europe/Busingen'                  = 'W. Europe Standard Time'
    'Europe/Gibraltar'                 = 'W. Europe Standard Time'
    'Europe/Rome'                      = 'W. Europe Standard Time'
    'Europe/Vaduz'                     = 'W. Europe Standard Time'
    'Europe/Luxembourg'                = 'W. Europe Standard Time'
    'Europe/Monaco'                    = 'W. Europe Standard Time'
    'Europe/Malta'                     = 'W. Europe Standard Time'
    'Europe/Amsterdam'                 = 'W. Europe Standard Time'
    'Europe/Oslo'                      = 'W. Europe Standard Time'
    'Europe/Stockholm'                 = 'W. Europe Standard Time'
    'Arctic/Longyearbyen'              = 'W. Europe Standard Time'
    'Europe/San_Marino'                = 'W. Europe Standard Time'
    'Europe/Vatican'                   = 'W. Europe Standard Time'
    'Europe/Budapest'                  = 'Central Europe Standard Time'
    'Europe/Tirane'                    = 'Central Europe Standard Time'
    'Europe/Prague'                    = 'Central Europe Standard Time'
    'Europe/Podgorica'                 = 'Central Europe Standard Time'
    'Europe/Belgrade'                  = 'Central Europe Standard Time'
    'Europe/Ljubljana'                 = 'Central Europe Standard Time'
    'Europe/Bratislava'                = 'Central Europe Standard Time'
    'Europe/Paris'                     = 'Romance Standard Time'
    'Europe/Brussels'                  = 'Romance Standard Time'
    'Europe/Copenhagen'                = 'Romance Standard Time'
    'Europe/Madrid'                    = 'Romance Standard Time'
    'Africa/Ceuta'                     = 'Romance Standard Time'
    'Europe/Warsaw'                    = 'Central European Standard Time'
    'Europe/Sarajevo'                  = 'Central European Standard Time'
    'Europe/Zagreb'                    = 'Central European Standard Time'
    'Europe/Skopje'                    = 'Central European Standard Time'
    'Africa/Lagos'                     = 'W. Central Africa Standard Time'
    'Africa/Luanda'                    = 'W. Central Africa Standard Time'
    'Africa/Porto-Novo'                = 'W. Central Africa Standard Time'
    'Africa/Kinshasa'                  = 'W. Central Africa Standard Time'
    'Africa/Bangui'                    = 'W. Central Africa Standard Time'
    'Africa/Brazzaville'               = 'W. Central Africa Standard Time'
    'Africa/Douala'                    = 'W. Central Africa Standard Time'
    'Africa/Algiers'                   = 'W. Central Africa Standard Time'
    'Africa/Libreville'                = 'W. Central Africa Standard Time'
    'Africa/Malabo'                    = 'W. Central Africa Standard Time'
    'Africa/Niamey'                    = 'W. Central Africa Standard Time'
    'Africa/Ndjamena'                  = 'W. Central Africa Standard Time'
    'Africa/Tunis'                     = 'W. Central Africa Standard Time'
    'Etc/GMT-1'                        = 'W. Central Africa Standard Time'
    'Asia/Amman'                       = 'Jordan Standard Time'
    'Europe/Bucharest'                 = 'GTB Standard Time'
    'Asia/Nicosia'                     = 'GTB Standard Time'
    'Asia/Famagusta'                   = 'GTB Standard Time'
    'Europe/Athens'                    = 'GTB Standard Time'
    'Asia/Beirut'                      = 'Middle East Standard Time'
    'Africa/Cairo'                     = 'Egypt Standard Time'
    'Europe/Chisinau'                  = 'E. Europe Standard Time'
    'Asia/Damascus'                    = 'Syria Standard Time'
    'Asia/Hebron'                      = 'West Bank Standard Time'
    'Asia/Gaza'                        = 'West Bank Standard Time'
    'Africa/Johannesburg'              = 'South Africa Standard Time'
    'Africa/Bujumbura'                 = 'South Africa Standard Time'
    'Africa/Gaborone'                  = 'South Africa Standard Time'
    'Africa/Lubumbashi'                = 'South Africa Standard Time'
    'Africa/Maseru'                    = 'South Africa Standard Time'
    'Africa/Blantyre'                  = 'South Africa Standard Time'
    'Africa/Maputo'                    = 'South Africa Standard Time'
    'Africa/Kigali'                    = 'South Africa Standard Time'
    'Africa/Mbabane'                   = 'South Africa Standard Time'
    'Africa/Lusaka'                    = 'South Africa Standard Time'
    'Africa/Harare'                    = 'South Africa Standard Time'
    'Etc/GMT-2'                        = 'South Africa Standard Time'
    'Europe/Kiev'                      = 'FLE Standard Time'
    'Europe/Kyiv'                      = 'FLE Standard Time'
    'Europe/Mariehamn'                 = 'FLE Standard Time'
    'Europe/Sofia'                     = 'FLE Standard Time'
    'Europe/Tallinn'                   = 'FLE Standard Time'
    'Europe/Helsinki'                  = 'FLE Standard Time'
    'Europe/Vilnius'                   = 'FLE Standard Time'
    'Europe/Riga'                      = 'FLE Standard Time'
    'Europe/Uzhgorod'                  = 'FLE Standard Time'
    'Europe/Zaporozhye'                = 'FLE Standard Time'
    'Asia/Jerusalem'                   = 'Israel Standard Time'
    'Europe/Kaliningrad'               = 'Kaliningrad Standard Time'
    'Africa/Khartoum'                  = 'Sudan Standard Time'
    'Africa/Tripoli'                   = 'Libya Standard Time'
    'Africa/Windhoek'                  = 'Namibia Standard Time'
    'Asia/Baghdad'                     = 'Arabic Standard Time'
    'Europe/Istanbul'                  = 'Turkey Standard Time'
    'Asia/Riyadh'                      = 'Arab Standard Time'
    'Asia/Bahrain'                     = 'Arab Standard Time'
    'Asia/Kuwait'                      = 'Arab Standard Time'
    'Asia/Qatar'                       = 'Arab Standard Time'
    'Asia/Aden'                        = 'Arab Standard Time'
    'Europe/Minsk'                     = 'Belarus Standard Time'
    'Europe/Moscow'                    = 'Russian Standard Time'
    'Europe/Kirov'                     = 'Russian Standard Time'
    'Europe/Simferopol'                = 'Russian Standard Time'
    'Africa/Nairobi'                   = 'E. Africa Standard Time'
    'Antarctica/Syowa'                 = 'E. Africa Standard Time'
    'Africa/Djibouti'                  = 'E. Africa Standard Time'
    'Africa/Asmera'                    = 'E. Africa Standard Time'
    'Africa/Addis_Ababa'               = 'E. Africa Standard Time'
    'Indian/Comoro'                    = 'E. Africa Standard Time'
    'Indian/Antananarivo'              = 'E. Africa Standard Time'
    'Africa/Mogadishu'                 = 'E. Africa Standard Time'
    'Africa/Juba'                      = 'E. Africa Standard Time'
    'Africa/Dar_es_Salaam'             = 'E. Africa Standard Time'
    'Africa/Kampala'                   = 'E. Africa Standard Time'
    'Indian/Mayotte'                   = 'E. Africa Standard Time'
    'Etc/GMT-3'                        = 'E. Africa Standard Time'
    'Asia/Tehran'                      = 'Iran Standard Time'
    'Asia/Dubai'                       = 'Arabian Standard Time'
    'Asia/Muscat'                      = 'Arabian Standard Time'
    'Etc/GMT-4'                        = 'Arabian Standard Time'
    'Europe/Astrakhan'                 = 'Astrakhan Standard Time'
    'Europe/Ulyanovsk'                 = 'Astrakhan Standard Time'
    'Asia/Baku'                        = 'Azerbaijan Standard Time'
    'Europe/Samara'                    = 'Russia Time Zone 3'
    'Indian/Mauritius'                 = 'Mauritius Standard Time'
    'Indian/Reunion'                   = 'Mauritius Standard Time'
    'Indian/Mahe'                      = 'Mauritius Standard Time'
    'Europe/Saratov'                   = 'Saratov Standard Time'
    'Asia/Tbilisi'                     = 'Georgian Standard Time'
    'Europe/Volgograd'                 = 'Volgograd Standard Time'
    'Asia/Yerevan'                     = 'Caucasus Standard Time'
    'Asia/Kabul'                       = 'Afghanistan Standard Time'
    'Asia/Tashkent'                    = 'West Asia Standard Time'
    'Antarctica/Mawson'                = 'West Asia Standard Time'
    'Asia/Oral'                        = 'West Asia Standard Time'
    'Asia/Aqtau'                       = 'West Asia Standard Time'
    'Asia/Aqtobe'                      = 'West Asia Standard Time'
    'Asia/Atyrau'                      = 'West Asia Standard Time'
    'Indian/Maldives'                  = 'West Asia Standard Time'
    'Indian/Kerguelen'                 = 'West Asia Standard Time'
    'Asia/Dushanbe'                    = 'West Asia Standard Time'
    'Asia/Ashgabat'                    = 'West Asia Standard Time'
    'Asia/Samarkand'                   = 'West Asia Standard Time'
    'Etc/GMT-5'                        = 'West Asia Standard Time'
    'Asia/Yekaterinburg'               = 'Ekaterinburg Standard Time'
    'Asia/Karachi'                     = 'Pakistan Standard Time'
    'Asia/Qyzylorda'                   = 'Qyzylorda Standard Time'
    'Asia/Calcutta'                    = 'India Standard Time'
    'Asia/Kolkata'                     = 'India Standard Time'
    'Asia/Colombo'                     = 'Sri Lanka Standard Time'
    'Asia/Katmandu'                    = 'Nepal Standard Time'
    'Asia/Kathmandu'                   = 'Nepal Standard Time'
    'Asia/Almaty'                      = 'Central Asia Standard Time'
    'Antarctica/Vostok'                = 'Central Asia Standard Time'
    'Asia/Urumqi'                      = 'Central Asia Standard Time'
    'Indian/Chagos'                    = 'Central Asia Standard Time'
    'Asia/Bishkek'                     = 'Central Asia Standard Time'
    'Asia/Qostanay'                    = 'Central Asia Standard Time'
    'Etc/GMT-6'                        = 'Central Asia Standard Time'
    'Asia/Dhaka'                       = 'Bangladesh Standard Time'
    'Asia/Thimphu'                     = 'Bangladesh Standard Time'
    'Asia/Omsk'                        = 'Omsk Standard Time'
    'Asia/Rangoon'                     = 'Myanmar Standard Time'
    'Asia/Yangon'                      = 'Myanmar Standard Time'
    'Indian/Cocos'                     = 'Myanmar Standard Time'
    'Asia/Bangkok'                     = 'SE Asia Standard Time'
    'Antarctica/Davis'                 = 'SE Asia Standard Time'
    'Indian/Christmas'                 = 'SE Asia Standard Time'
    'Asia/Jakarta'                     = 'SE Asia Standard Time'
    'Asia/Pontianak'                   = 'SE Asia Standard Time'
    'Asia/Phnom_Penh'                  = 'SE Asia Standard Time'
    'Asia/Vientiane'                   = 'SE Asia Standard Time'
    'Asia/Saigon'                      = 'SE Asia Standard Time'
    'Etc/GMT-7'                        = 'SE Asia Standard Time'
    'Asia/Barnaul'                     = 'Altai Standard Time'
    'Asia/Hovd'                        = 'W. Mongolia Standard Time'
    'Asia/Krasnoyarsk'                 = 'North Asia Standard Time'
    'Asia/Novokuznetsk'                = 'North Asia Standard Time'
    'Asia/Novosibirsk'                 = 'N. Central Asia Standard Time'
    'Asia/Tomsk'                       = 'Tomsk Standard Time'
    'Asia/Shanghai'                    = 'China Standard Time'
    'Asia/Hong_Kong'                   = 'China Standard Time'
    'Asia/Macau'                       = 'China Standard Time'
    'Asia/Irkutsk'                     = 'North Asia East Standard Time'
    'Asia/Singapore'                   = 'Singapore Standard Time'
    'Antarctica/Casey'                 = 'Singapore Standard Time'
    'Asia/Brunei'                      = 'Singapore Standard Time'
    'Asia/Makassar'                    = 'Singapore Standard Time'
    'Asia/Kuala_Lumpur'                = 'Singapore Standard Time'
    'Asia/Kuching'                     = 'Singapore Standard Time'
    'Asia/Manila'                      = 'Singapore Standard Time'
    'Etc/GMT-8'                        = 'Singapore Standard Time'
    'Australia/Perth'                  = 'W. Australia Standard Time'
    'Asia/Taipei'                      = 'Taipei Standard Time'
    'Asia/Ulaanbaatar'                 = 'Ulaanbaatar Standard Time'
    'Asia/Choibalsan'                  = 'Ulaanbaatar Standard Time'
    'Australia/Eucla'                  = 'Aus Central W. Standard Time'
    'Asia/Chita'                       = 'Transbaikal Standard Time'
    'Asia/Tokyo'                       = 'Tokyo Standard Time'
    'Asia/Jayapura'                    = 'Tokyo Standard Time'
    'Pacific/Palau'                    = 'Tokyo Standard Time'
    'Asia/Dili'                        = 'Tokyo Standard Time'
    'Etc/GMT-9'                        = 'Tokyo Standard Time'
    'Asia/Pyongyang'                   = 'North Korea Standard Time'
    'Asia/Seoul'                       = 'Korea Standard Time'
    'Asia/Yakutsk'                     = 'Yakutsk Standard Time'
    'Asia/Khandyga'                    = 'Yakutsk Standard Time'
    'Australia/Adelaide'               = 'Cen. Australia Standard Time'
    'Australia/Broken_Hill'            = 'Cen. Australia Standard Time'
    'Australia/Darwin'                 = 'AUS Central Standard Time'
    'Australia/Brisbane'               = 'E. Australia Standard Time'
    'Australia/Lindeman'               = 'E. Australia Standard Time'
    'Australia/Sydney'                 = 'AUS Eastern Standard Time'
    'Australia/Melbourne'              = 'AUS Eastern Standard Time'
    'Pacific/Port_Moresby'             = 'West Pacific Standard Time'
    'Antarctica/DumontDUrville'        = 'West Pacific Standard Time'
    'Pacific/Truk'                     = 'West Pacific Standard Time'
    'Pacific/Chuuk'                    = 'West Pacific Standard Time'
    'Pacific/Guam'                     = 'West Pacific Standard Time'
    'Pacific/Saipan'                   = 'West Pacific Standard Time'
    'Etc/GMT-10'                       = 'West Pacific Standard Time'
    'Australia/Hobart'                 = 'Tasmania Standard Time'
    'Australia/Currie'                 = 'Tasmania Standard Time'
    'Asia/Vladivostok'                 = 'Vladivostok Standard Time'
    'Asia/Ust-Nera'                    = 'Vladivostok Standard Time'
    'Australia/Lord_Howe'              = 'Lord Howe Standard Time'
    'Pacific/Bougainville'             = 'Bougainville Standard Time'
    'Asia/Srednekolymsk'               = 'Russia Time Zone 10'
    'Asia/Magadan'                     = 'Magadan Standard Time'
    'Pacific/Norfolk'                  = 'Norfolk Standard Time'
    'Asia/Sakhalin'                    = 'Sakhalin Standard Time'
    'Pacific/Guadalcanal'              = 'Central Pacific Standard Time'
    'Antarctica/Macquarie'             = 'Central Pacific Standard Time'
    'Pacific/Ponape'                   = 'Central Pacific Standard Time'
    'Pacific/Pohnpei'                  = 'Central Pacific Standard Time'
    'Pacific/Kosrae'                   = 'Central Pacific Standard Time'
    'Pacific/Noumea'                   = 'Central Pacific Standard Time'
    'Pacific/Efate'                    = 'Central Pacific Standard Time'
    'Etc/GMT-11'                       = 'Central Pacific Standard Time'
    'Asia/Kamchatka'                   = 'Russia Time Zone 11'
    'Asia/Anadyr'                      = 'Russia Time Zone 11'
    'Pacific/Auckland'                 = 'New Zealand Standard Time'
    'Antarctica/McMurdo'               = 'New Zealand Standard Time'
    'Etc/GMT-12'                       = 'UTC+12'
    'Pacific/Tarawa'                   = 'UTC+12'
    'Pacific/Majuro'                   = 'UTC+12'
    'Pacific/Kwajalein'                = 'UTC+12'
    'Pacific/Nauru'                    = 'UTC+12'
    'Pacific/Funafuti'                 = 'UTC+12'
    'Pacific/Wake'                     = 'UTC+12'
    'Pacific/Wallis'                   = 'UTC+12'
    'Pacific/Fiji'                     = 'Fiji Standard Time'
    'Pacific/Chatham'                  = 'Chatham Islands Standard Time'
    'Etc/GMT-13'                       = 'UTC+13'
    'Pacific/Enderbury'                = 'UTC+13'
    'Pacific/Fakaofo'                  = 'UTC+13'
    'Pacific/Tongatapu'                = 'Tonga Standard Time'
    'Pacific/Apia'                     = 'Samoa Standard Time'
    'Pacific/Kiritimati'               = 'Line Islands Standard Time'
    'Etc/GMT-14'                       = 'Line Islands Standard Time'
    'US/Alaska'                        = 'Alaskan Standard Time'
    'US/Arizona'                       = 'US Mountain Standard Time'
    'US/Central'                       = 'Central Standard Time'
    'US/Eastern'                       = 'Eastern Standard Time'
    'US/Hawaii'                        = 'Hawaiian Standard Time'
    'US/Mountain'                      = 'Mountain Standard Time'
    'US/Pacific'                       = 'Pacific Standard Time'
}

$Script:WindowsToIANA = @{
    'Dateline Standard Time'           = 'Etc/GMT+12'
    'UTC-11'                           = 'Etc/GMT+11'
    'Aleutian Standard Time'           = 'America/Adak'
    'Hawaiian Standard Time'           = 'Pacific/Honolulu'
    'Marquesas Standard Time'          = 'Pacific/Marquesas'
    'Alaskan Standard Time'            = 'America/Anchorage'
    'UTC-09'                           = 'Etc/GMT+9'
    'Pacific Standard Time (Mexico)'   = 'America/Tijuana'
    'UTC-08'                           = 'Etc/GMT+8'
    'Pacific Standard Time'            = 'America/Los_Angeles'
    'US Mountain Standard Time'        = 'America/Phoenix'
    'Mountain Standard Time (Mexico)'  = 'America/Mazatlan'
    'Mountain Standard Time'           = 'America/Denver'
    'Central America Standard Time'    = 'America/Guatemala'
    'Central Standard Time'            = 'America/Chicago'
    'Easter Island Standard Time'      = 'Pacific/Easter'
    'Central Standard Time (Mexico)'   = 'America/Mexico_City'
    'Canada Central Standard Time'     = 'America/Regina'
    'SA Pacific Standard Time'         = 'America/Bogota'
    'Eastern Standard Time (Mexico)'   = 'America/Cancun'
    'Eastern Standard Time'            = 'America/New_York'
    'Haiti Standard Time'              = 'America/Port-au-Prince'
    'Cuba Standard Time'               = 'America/Havana'
    'US Eastern Standard Time'         = 'America/Indianapolis'
    'Turks And Caicos Standard Time'   = 'America/Grand_Turk'
    'Paraguay Standard Time'           = 'America/Asuncion'
    'Atlantic Standard Time'           = 'America/Halifax'
    'Venezuela Standard Time'          = 'America/Caracas'
    'Central Brazilian Standard Time'  = 'America/Cuiaba'
    'SA Western Standard Time'         = 'America/La_Paz'
    'Pacific SA Standard Time'         = 'America/Santiago'
    'Newfoundland Standard Time'       = 'America/St_Johns'
    'Tocantins Standard Time'          = 'America/Araguaina'
    'E. South America Standard Time'   = 'America/Sao_Paulo'
    'SA Eastern Standard Time'         = 'America/Cayenne'
    'Argentina Standard Time'          = 'America/Buenos_Aires'
    'Greenland Standard Time'          = 'America/Nuuk'
    'Montevideo Standard Time'         = 'America/Montevideo'
    'Magallanes Standard Time'         = 'America/Punta_Arenas'
    'Saint Pierre Standard Time'       = 'America/Miquelon'
    'Bahia Standard Time'              = 'America/Bahia'
    'UTC-02'                           = 'Etc/GMT+2'
    'Azores Standard Time'             = 'Atlantic/Azores'
    'Cape Verde Standard Time'         = 'Atlantic/Cape_Verde'
    'UTC'                              = 'Etc/UTC'
    'GMT Standard Time'                = 'Europe/London'
    'Greenwich Standard Time'          = 'Atlantic/Reykjavik'
    'Sao Tome Standard Time'           = 'Africa/Sao_Tome'
    'Morocco Standard Time'            = 'Africa/Casablanca'
    'W. Europe Standard Time'          = 'Europe/Berlin'
    'Central Europe Standard Time'     = 'Europe/Budapest'
    'Romance Standard Time'            = 'Europe/Paris'
    'Central European Standard Time'   = 'Europe/Warsaw'
    'W. Central Africa Standard Time'  = 'Africa/Lagos'
    'Jordan Standard Time'             = 'Asia/Amman'
    'GTB Standard Time'                = 'Europe/Bucharest'
    'Middle East Standard Time'        = 'Asia/Beirut'
    'Egypt Standard Time'              = 'Africa/Cairo'
    'E. Europe Standard Time'          = 'Europe/Chisinau'
    'Syria Standard Time'              = 'Asia/Damascus'
    'West Bank Standard Time'          = 'Asia/Hebron'
    'South Africa Standard Time'       = 'Africa/Johannesburg'
    'FLE Standard Time'                = 'Europe/Kiev'
    'Israel Standard Time'             = 'Asia/Jerusalem'
    'Kaliningrad Standard Time'        = 'Europe/Kaliningrad'
    'Sudan Standard Time'              = 'Africa/Khartoum'
    'Libya Standard Time'              = 'Africa/Tripoli'
    'Namibia Standard Time'            = 'Africa/Windhoek'
    'Arabic Standard Time'             = 'Asia/Baghdad'
    'Turkey Standard Time'             = 'Europe/Istanbul'
    'Arab Standard Time'               = 'Asia/Riyadh'
    'Belarus Standard Time'            = 'Europe/Minsk'
    'Russian Standard Time'            = 'Europe/Moscow'
    'E. Africa Standard Time'          = 'Africa/Nairobi'
    'Volgograd Standard Time'          = 'Europe/Volgograd'
    'Iran Standard Time'               = 'Asia/Tehran'
    'Arabian Standard Time'            = 'Asia/Dubai'
    'Astrakhan Standard Time'          = 'Europe/Astrakhan'
    'Azerbaijan Standard Time'         = 'Asia/Baku'
    'Russia Time Zone 3'               = 'Europe/Samara'
    'Mauritius Standard Time'          = 'Indian/Mauritius'
    'Saratov Standard Time'            = 'Europe/Saratov'
    'Georgian Standard Time'           = 'Asia/Tbilisi'
    'Caucasus Standard Time'           = 'Asia/Yerevan'
    'Afghanistan Standard Time'        = 'Asia/Kabul'
    'West Asia Standard Time'          = 'Asia/Tashkent'
    'Ekaterinburg Standard Time'       = 'Asia/Yekaterinburg'
    'Pakistan Standard Time'           = 'Asia/Karachi'
    'Qyzylorda Standard Time'          = 'Asia/Qyzylorda'
    'India Standard Time'              = 'Asia/Calcutta'
    'Sri Lanka Standard Time'          = 'Asia/Colombo'
    'Nepal Standard Time'              = 'Asia/Katmandu'
    'Central Asia Standard Time'       = 'Asia/Almaty'
    'Bangladesh Standard Time'         = 'Asia/Dhaka'
    'Omsk Standard Time'               = 'Asia/Omsk'
    'Myanmar Standard Time'            = 'Asia/Rangoon'
    'SE Asia Standard Time'            = 'Asia/Bangkok'
    'Altai Standard Time'              = 'Asia/Barnaul'
    'W. Mongolia Standard Time'        = 'Asia/Hovd'
    'North Asia Standard Time'         = 'Asia/Krasnoyarsk'
    'N. Central Asia Standard Time'    = 'Asia/Novosibirsk'
    'Tomsk Standard Time'              = 'Asia/Tomsk'
    'China Standard Time'              = 'Asia/Shanghai'
    'North Asia East Standard Time'    = 'Asia/Irkutsk'
    'Singapore Standard Time'          = 'Asia/Singapore'
    'W. Australia Standard Time'       = 'Australia/Perth'
    'Taipei Standard Time'             = 'Asia/Taipei'
    'Ulaanbaatar Standard Time'        = 'Asia/Ulaanbaatar'
    'Aus Central W. Standard Time'     = 'Australia/Eucla'
    'Transbaikal Standard Time'        = 'Asia/Chita'
    'Tokyo Standard Time'              = 'Asia/Tokyo'
    'North Korea Standard Time'        = 'Asia/Pyongyang'
    'Korea Standard Time'              = 'Asia/Seoul'
    'Yakutsk Standard Time'            = 'Asia/Yakutsk'
    'Cen. Australia Standard Time'     = 'Australia/Adelaide'
    'AUS Central Standard Time'        = 'Australia/Darwin'
    'E. Australia Standard Time'       = 'Australia/Brisbane'
    'AUS Eastern Standard Time'        = 'Australia/Sydney'
    'West Pacific Standard Time'       = 'Pacific/Port_Moresby'
    'Tasmania Standard Time'           = 'Australia/Hobart'
    'Vladivostok Standard Time'        = 'Asia/Vladivostok'
    'Lord Howe Standard Time'          = 'Australia/Lord_Howe'
    'Bougainville Standard Time'       = 'Pacific/Bougainville'
    'Russia Time Zone 10'              = 'Asia/Srednekolymsk'
    'Magadan Standard Time'            = 'Asia/Magadan'
    'Norfolk Standard Time'            = 'Pacific/Norfolk'
    'Sakhalin Standard Time'           = 'Asia/Sakhalin'
    'Central Pacific Standard Time'    = 'Pacific/Guadalcanal'
    'Russia Time Zone 11'              = 'Asia/Kamchatka'
    'New Zealand Standard Time'        = 'Pacific/Auckland'
    'UTC+12'                           = 'Etc/GMT-12'
    'Fiji Standard Time'               = 'Pacific/Fiji'
    'Chatham Islands Standard Time'    = 'Pacific/Chatham'
    'UTC+13'                           = 'Etc/GMT-13'
    'Tonga Standard Time'              = 'Pacific/Tongatapu'
    'Samoa Standard Time'              = 'Pacific/Apia'
    'Line Islands Standard Time'       = 'Pacific/Kiritimati'
}

function Find-LMTimeZoneInfo {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory)]
        [String]$Timezone
    )

    try {
        return [System.TimeZoneInfo]::FindSystemTimeZoneById($Timezone)
    } catch {}

    if ($Script:IANAtoWindows.ContainsKey($Timezone)) {
        try {
            return [System.TimeZoneInfo]::FindSystemTimeZoneById($Script:IANAtoWindows[$Timezone])
        } catch {}
    }

    if ($Script:WindowsToIANA.ContainsKey($Timezone)) {
        try {
            return [System.TimeZoneInfo]::FindSystemTimeZoneById($Script:WindowsToIANA[$Timezone])
        } catch {}
    }

    $match = [System.TimeZoneInfo]::GetSystemTimeZones() | Where-Object {
        $_.StandardName -eq $Timezone -or $_.DaylightName -eq $Timezone
    } | Select-Object -First 1
    if ($match) { return $match }

    throw "Invalid timezone '$Timezone'. Please provide a valid IANA timezone (e.g. America/New_York) or Windows timezone (e.g. Eastern Standard Time)."
}

function Resolve-LMTimezoneToIANAId {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory)]
        [String]$Timezone
    )

    if ($Script:IANAtoWindows.ContainsKey($Timezone)) {
        return $Timezone
    }

    if ($Script:WindowsToIANA.ContainsKey($Timezone)) {
        return $Script:WindowsToIANA[$Timezone]
    }

    try {
        $tzInfo = Find-LMTimeZoneInfo -Timezone $Timezone
        if ($Script:IANAtoWindows.ContainsKey($tzInfo.Id)) {
            return $tzInfo.Id
        }
        if ($Script:WindowsToIANA.ContainsKey($tzInfo.Id)) {
            return $Script:WindowsToIANA[$tzInfo.Id]
        }
        if ($tzInfo.Id -match '/') {
            return $tzInfo.Id
        }
        $ianaId = $null
        if ([System.TimeZoneInfo]::TryConvertWindowsIdToIanaId($tzInfo.Id, [ref]$ianaId)) {
            return $ianaId
        }
    } catch {}

    return $Timezone
}

function Test-LMTimezoneId {
    [CmdletBinding()]
    param (
        [AllowNull()]
        [AllowEmptyString()]
        [String]$Timezone
    )

    if ([String]::IsNullOrWhiteSpace($Timezone)) {
        return $true
    }

    try {
        Find-LMTimeZoneInfo -Timezone $Timezone | Out-Null
        return $true
    }
    catch {
        throw "Invalid timezone '$Timezone'. Please provide a valid IANA timezone (e.g. America/New_York) or Windows timezone (e.g. Eastern Standard Time)."
    }
}

function Resolve-LMSDTTimezone {
    [CmdletBinding()]
    param (
        [AllowNull()]
        [AllowEmptyString()]
        [String]$Timezone
    )

    if (![String]::IsNullOrWhiteSpace($Timezone)) {
        Test-LMTimezoneId -Timezone $Timezone | Out-Null
        return (Resolve-LMTimezoneToIANAId -Timezone $Timezone)
    }

    if ($Script:LMAuth.PSObject.Properties.Name -contains 'PortalTimezone' -and -not [String]::IsNullOrWhiteSpace($Script:LMAuth.PortalTimezone)) {
        return $Script:LMAuth.PortalTimezone
    }

    try {
        $PortalInfo = Get-LMPortalInfo -ErrorAction Stop
        $PortalTimezone = @(
            $PortalInfo.timezone,
            $PortalInfo.timeZone,
            $PortalInfo.portalTimezone,
            $PortalInfo.portalTimeZone
        ) | Where-Object { -not [String]::IsNullOrWhiteSpace($_) } | Select-Object -First 1

        if (-not [String]::IsNullOrWhiteSpace($PortalTimezone)) {
            if ($Script:LMAuth.PSObject.Properties.Name -contains 'PortalTimezone') {
                $Script:LMAuth.PortalTimezone = $PortalTimezone
            }
            else {
                Add-Member -InputObject $Script:LMAuth -MemberType NoteProperty -Name PortalTimezone -Value $PortalTimezone -Force
            }
            return $PortalTimezone
        }
    }
    catch {}

    throw "Unable to resolve portal timezone automatically. Please specify -Timezone explicitly (for example, America/New_York)."
}

function ConvertTo-LMSDTEpochMillis {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory)]
        [Datetime]$DateTime,

        [Parameter(Mandatory)]
        [String]$Timezone
    )

    try {
        $TimeZoneInfo = Find-LMTimeZoneInfo -Timezone $Timezone
    }
    catch {
        throw "Unable to resolve timezone '$Timezone'. Please provide a valid IANA timezone (e.g. America/New_York) or Windows timezone (e.g. Eastern Standard Time)."
    }

    # Treat the provided DateTime as a wall-clock time in the selected timezone.
    $UnspecifiedDateTime = [Datetime]::SpecifyKind($DateTime, [System.DateTimeKind]::Unspecified)

    if ($TimeZoneInfo.IsInvalidTime($UnspecifiedDateTime)) {
        throw "The date/time '$($DateTime.ToString("yyyy-MM-dd HH:mm:ss"))' is invalid in timezone '$Timezone' due to a DST transition. Please choose a valid local time."
    }

    $Offset = $TimeZoneInfo.GetUtcOffset($UnspecifiedDateTime)
    $DateTimeOffset = [DateTimeOffset]::new($UnspecifiedDateTime, $Offset)
    return $DateTimeOffset.ToUnixTimeMilliseconds()
}