@@ -192,6 +192,7 @@ $Script:IANAtoWindows = @{
192192 ' Europe/London' = ' GMT Standard Time'
193193 ' Atlantic/Canary' = ' GMT Standard Time'
194194 ' Atlantic/Faeroe' = ' GMT Standard Time'
195+ ' Atlantic/Faroe' = ' GMT Standard Time'
195196 ' Europe/Guernsey' = ' GMT Standard Time'
196197 ' Europe/Dublin' = ' GMT Standard Time'
197198 ' Europe/Isle_of_Man' = ' GMT Standard Time'
@@ -425,6 +426,7 @@ $Script:IANAtoWindows = @{
425426 ' Pacific/Port_Moresby' = ' West Pacific Standard Time'
426427 ' Antarctica/DumontDUrville' = ' West Pacific Standard Time'
427428 ' Pacific/Truk' = ' West Pacific Standard Time'
429+ ' Pacific/Chuuk' = ' West Pacific Standard Time'
428430 ' Pacific/Guam' = ' West Pacific Standard Time'
429431 ' Pacific/Saipan' = ' West Pacific Standard Time'
430432 ' Etc/GMT-10' = ' West Pacific Standard Time'
@@ -441,6 +443,7 @@ $Script:IANAtoWindows = @{
441443 ' Pacific/Guadalcanal' = ' Central Pacific Standard Time'
442444 ' Antarctica/Macquarie' = ' Central Pacific Standard Time'
443445 ' Pacific/Ponape' = ' Central Pacific Standard Time'
446+ ' Pacific/Pohnpei' = ' Central Pacific Standard Time'
444447 ' Pacific/Kosrae' = ' Central Pacific Standard Time'
445448 ' Pacific/Noumea' = ' Central Pacific Standard Time'
446449 ' Pacific/Efate' = ' Central Pacific Standard Time'
@@ -475,11 +478,144 @@ $Script:IANAtoWindows = @{
475478 ' US/Pacific' = ' Pacific Standard Time'
476479}
477480
478- $Script :WindowsToIANA = @ {}
479- foreach ($entry in ($Script :IANAtoWindows.GetEnumerator () | Sort-Object Key)) {
480- if (-not $Script :WindowsToIANA.ContainsKey ($entry.Value )) {
481- $Script :WindowsToIANA [$entry.Value ] = $entry.Key
482- }
481+ $Script :WindowsToIANA = @ {
482+ ' Dateline Standard Time' = ' Etc/GMT+12'
483+ ' UTC-11' = ' Etc/GMT+11'
484+ ' Aleutian Standard Time' = ' America/Adak'
485+ ' Hawaiian Standard Time' = ' Pacific/Honolulu'
486+ ' Marquesas Standard Time' = ' Pacific/Marquesas'
487+ ' Alaskan Standard Time' = ' America/Anchorage'
488+ ' UTC-09' = ' Etc/GMT+9'
489+ ' Pacific Standard Time (Mexico)' = ' America/Tijuana'
490+ ' UTC-08' = ' Etc/GMT+8'
491+ ' Pacific Standard Time' = ' America/Los_Angeles'
492+ ' US Mountain Standard Time' = ' America/Phoenix'
493+ ' Mountain Standard Time (Mexico)' = ' America/Mazatlan'
494+ ' Mountain Standard Time' = ' America/Denver'
495+ ' Central America Standard Time' = ' America/Guatemala'
496+ ' Central Standard Time' = ' America/Chicago'
497+ ' Easter Island Standard Time' = ' Pacific/Easter'
498+ ' Central Standard Time (Mexico)' = ' America/Mexico_City'
499+ ' Canada Central Standard Time' = ' America/Regina'
500+ ' SA Pacific Standard Time' = ' America/Bogota'
501+ ' Eastern Standard Time (Mexico)' = ' America/Cancun'
502+ ' Eastern Standard Time' = ' America/New_York'
503+ ' Haiti Standard Time' = ' America/Port-au-Prince'
504+ ' Cuba Standard Time' = ' America/Havana'
505+ ' US Eastern Standard Time' = ' America/Indianapolis'
506+ ' Turks And Caicos Standard Time' = ' America/Grand_Turk'
507+ ' Paraguay Standard Time' = ' America/Asuncion'
508+ ' Atlantic Standard Time' = ' America/Halifax'
509+ ' Venezuela Standard Time' = ' America/Caracas'
510+ ' Central Brazilian Standard Time' = ' America/Cuiaba'
511+ ' SA Western Standard Time' = ' America/La_Paz'
512+ ' Pacific SA Standard Time' = ' America/Santiago'
513+ ' Newfoundland Standard Time' = ' America/St_Johns'
514+ ' Tocantins Standard Time' = ' America/Araguaina'
515+ ' E. South America Standard Time' = ' America/Sao_Paulo'
516+ ' SA Eastern Standard Time' = ' America/Cayenne'
517+ ' Argentina Standard Time' = ' America/Buenos_Aires'
518+ ' Greenland Standard Time' = ' America/Nuuk'
519+ ' Montevideo Standard Time' = ' America/Montevideo'
520+ ' Magallanes Standard Time' = ' America/Punta_Arenas'
521+ ' Saint Pierre Standard Time' = ' America/Miquelon'
522+ ' Bahia Standard Time' = ' America/Bahia'
523+ ' UTC-02' = ' Etc/GMT+2'
524+ ' Azores Standard Time' = ' Atlantic/Azores'
525+ ' Cape Verde Standard Time' = ' Atlantic/Cape_Verde'
526+ ' UTC' = ' Etc/UTC'
527+ ' GMT Standard Time' = ' Europe/London'
528+ ' Greenwich Standard Time' = ' Atlantic/Reykjavik'
529+ ' Sao Tome Standard Time' = ' Africa/Sao_Tome'
530+ ' Morocco Standard Time' = ' Africa/Casablanca'
531+ ' W. Europe Standard Time' = ' Europe/Berlin'
532+ ' Central Europe Standard Time' = ' Europe/Budapest'
533+ ' Romance Standard Time' = ' Europe/Paris'
534+ ' Central European Standard Time' = ' Europe/Warsaw'
535+ ' W. Central Africa Standard Time' = ' Africa/Lagos'
536+ ' Jordan Standard Time' = ' Asia/Amman'
537+ ' GTB Standard Time' = ' Europe/Bucharest'
538+ ' Middle East Standard Time' = ' Asia/Beirut'
539+ ' Egypt Standard Time' = ' Africa/Cairo'
540+ ' E. Europe Standard Time' = ' Europe/Chisinau'
541+ ' Syria Standard Time' = ' Asia/Damascus'
542+ ' West Bank Standard Time' = ' Asia/Hebron'
543+ ' South Africa Standard Time' = ' Africa/Johannesburg'
544+ ' FLE Standard Time' = ' Europe/Kiev'
545+ ' Israel Standard Time' = ' Asia/Jerusalem'
546+ ' Kaliningrad Standard Time' = ' Europe/Kaliningrad'
547+ ' Sudan Standard Time' = ' Africa/Khartoum'
548+ ' Libya Standard Time' = ' Africa/Tripoli'
549+ ' Namibia Standard Time' = ' Africa/Windhoek'
550+ ' Arabic Standard Time' = ' Asia/Baghdad'
551+ ' Turkey Standard Time' = ' Europe/Istanbul'
552+ ' Arab Standard Time' = ' Asia/Riyadh'
553+ ' Belarus Standard Time' = ' Europe/Minsk'
554+ ' Russian Standard Time' = ' Europe/Moscow'
555+ ' E. Africa Standard Time' = ' Africa/Nairobi'
556+ ' Volgograd Standard Time' = ' Europe/Volgograd'
557+ ' Iran Standard Time' = ' Asia/Tehran'
558+ ' Arabian Standard Time' = ' Asia/Dubai'
559+ ' Astrakhan Standard Time' = ' Europe/Astrakhan'
560+ ' Azerbaijan Standard Time' = ' Asia/Baku'
561+ ' Russia Time Zone 3' = ' Europe/Samara'
562+ ' Mauritius Standard Time' = ' Indian/Mauritius'
563+ ' Saratov Standard Time' = ' Europe/Saratov'
564+ ' Georgian Standard Time' = ' Asia/Tbilisi'
565+ ' Caucasus Standard Time' = ' Asia/Yerevan'
566+ ' Afghanistan Standard Time' = ' Asia/Kabul'
567+ ' West Asia Standard Time' = ' Asia/Tashkent'
568+ ' Ekaterinburg Standard Time' = ' Asia/Yekaterinburg'
569+ ' Pakistan Standard Time' = ' Asia/Karachi'
570+ ' Qyzylorda Standard Time' = ' Asia/Qyzylorda'
571+ ' India Standard Time' = ' Asia/Calcutta'
572+ ' Sri Lanka Standard Time' = ' Asia/Colombo'
573+ ' Nepal Standard Time' = ' Asia/Katmandu'
574+ ' Central Asia Standard Time' = ' Asia/Almaty'
575+ ' Bangladesh Standard Time' = ' Asia/Dhaka'
576+ ' Omsk Standard Time' = ' Asia/Omsk'
577+ ' Myanmar Standard Time' = ' Asia/Rangoon'
578+ ' SE Asia Standard Time' = ' Asia/Bangkok'
579+ ' Altai Standard Time' = ' Asia/Barnaul'
580+ ' W. Mongolia Standard Time' = ' Asia/Hovd'
581+ ' North Asia Standard Time' = ' Asia/Krasnoyarsk'
582+ ' N. Central Asia Standard Time' = ' Asia/Novosibirsk'
583+ ' Tomsk Standard Time' = ' Asia/Tomsk'
584+ ' China Standard Time' = ' Asia/Shanghai'
585+ ' North Asia East Standard Time' = ' Asia/Irkutsk'
586+ ' Singapore Standard Time' = ' Asia/Singapore'
587+ ' W. Australia Standard Time' = ' Australia/Perth'
588+ ' Taipei Standard Time' = ' Asia/Taipei'
589+ ' Ulaanbaatar Standard Time' = ' Asia/Ulaanbaatar'
590+ ' Aus Central W. Standard Time' = ' Australia/Eucla'
591+ ' Transbaikal Standard Time' = ' Asia/Chita'
592+ ' Tokyo Standard Time' = ' Asia/Tokyo'
593+ ' North Korea Standard Time' = ' Asia/Pyongyang'
594+ ' Korea Standard Time' = ' Asia/Seoul'
595+ ' Yakutsk Standard Time' = ' Asia/Yakutsk'
596+ ' Cen. Australia Standard Time' = ' Australia/Adelaide'
597+ ' AUS Central Standard Time' = ' Australia/Darwin'
598+ ' E. Australia Standard Time' = ' Australia/Brisbane'
599+ ' AUS Eastern Standard Time' = ' Australia/Sydney'
600+ ' West Pacific Standard Time' = ' Pacific/Port_Moresby'
601+ ' Tasmania Standard Time' = ' Australia/Hobart'
602+ ' Vladivostok Standard Time' = ' Asia/Vladivostok'
603+ ' Lord Howe Standard Time' = ' Australia/Lord_Howe'
604+ ' Bougainville Standard Time' = ' Pacific/Bougainville'
605+ ' Russia Time Zone 10' = ' Asia/Srednekolymsk'
606+ ' Magadan Standard Time' = ' Asia/Magadan'
607+ ' Norfolk Standard Time' = ' Pacific/Norfolk'
608+ ' Sakhalin Standard Time' = ' Asia/Sakhalin'
609+ ' Central Pacific Standard Time' = ' Pacific/Guadalcanal'
610+ ' Russia Time Zone 11' = ' Asia/Kamchatka'
611+ ' New Zealand Standard Time' = ' Pacific/Auckland'
612+ ' UTC+12' = ' Etc/GMT-12'
613+ ' Fiji Standard Time' = ' Pacific/Fiji'
614+ ' Chatham Islands Standard Time' = ' Pacific/Chatham'
615+ ' UTC+13' = ' Etc/GMT-13'
616+ ' Tonga Standard Time' = ' Pacific/Tongatapu'
617+ ' Samoa Standard Time' = ' Pacific/Apia'
618+ ' Line Islands Standard Time' = ' Pacific/Kiritimati'
483619}
484620
485621function Find-LMTimeZoneInfo {
@@ -499,6 +635,17 @@ function Find-LMTimeZoneInfo {
499635 } catch {}
500636 }
501637
638+ if ($Script :WindowsToIANA.ContainsKey ($Timezone )) {
639+ try {
640+ return [System.TimeZoneInfo ]::FindSystemTimeZoneById($Script :WindowsToIANA [$Timezone ])
641+ } catch {}
642+ }
643+
644+ $match = [System.TimeZoneInfo ]::GetSystemTimeZones() | Where-Object {
645+ $_.StandardName -eq $Timezone -or $_.DaylightName -eq $Timezone
646+ } | Select-Object - First 1
647+ if ($match ) { return $match }
648+
502649 throw " Invalid timezone '$Timezone '. Please provide a valid IANA timezone (e.g. America/New_York) or Windows timezone (e.g. Eastern Standard Time)."
503650}
504651
@@ -518,7 +665,13 @@ function Resolve-LMTimezoneToIANAId {
518665 }
519666
520667 try {
521- $tzInfo = [System.TimeZoneInfo ]::FindSystemTimeZoneById($Timezone )
668+ $tzInfo = Find-LMTimeZoneInfo - Timezone $Timezone
669+ if ($Script :IANAtoWindows.ContainsKey ($tzInfo.Id )) {
670+ return $tzInfo.Id
671+ }
672+ if ($Script :WindowsToIANA.ContainsKey ($tzInfo.Id )) {
673+ return $Script :WindowsToIANA [$tzInfo.Id ]
674+ }
522675 if ($tzInfo.Id -match ' /' ) {
523676 return $tzInfo.Id
524677 }
0 commit comments