Skip to content

Commit 386037b

Browse files
committed
Update ConvertTo-LMSDTEpochMillis.ps1
1 parent 04646ef commit 386037b

1 file changed

Lines changed: 159 additions & 6 deletions

File tree

Private/ConvertTo-LMSDTEpochMillis.ps1

Lines changed: 159 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

485621
function 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

Comments
 (0)