Created
August 30, 2022 19:09
-
-
Save JordanTheITGuy/b1b3d76d350c4b525ba5a504d57bd747 to your computer and use it in GitHub Desktop.
Get the current time in a bunch of time zones. Or don't. Bonus points send them all to Markdown and round to the nearest second.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function Get-StandardTimes { | |
<# | |
.Description | |
The Get-StandardTimes function is designed to get a bundle of standardized times from various time zones you care about. | |
To update the list of time zones you care about update the array of time zones with the results from "Get-TimeZone". | |
.EXAMPLE | |
Get-StandardTimes | |
Time Zone | |
---- ---- | |
8/30/2022 11:43:33 AM Pacific Standard Time | |
8/30/2022 12:43:33 PM Mountain Standard Time | |
8/30/2022 1:43:33 PM Central Standard Time | |
8/30/2022 2:43:33 PM Eastern Standard Time | |
8/30/2022 6:43:33 PM UTC | |
8/30/2022 7:43:33 PM GMT Standard Time | |
8/30/2022 8:43:33 PM Central European Standard Time | |
8/30/2022 8:43:33 PM Romance Standard Time | |
8/30/2022 8:43:33 PM W. Europe Standard Time | |
8/31/2022 12:13:33 AM India Standard Time | |
8/31/2022 3:43:33 AM Tokyo Standard Time | |
8/31/2022 4:43:33 AM AUS Eastern Standard Time | |
Note how the time zones are output in a simple standard time with the current exact time. | |
.EXAMPLE | |
Get-StandardTimes -AsMarkdown | |
Time | Zone | |
--------------------- | ------------------------------ | |
8/30/2022 11:44:28 AM | Pacific Standard Time | |
8/30/2022 12:44:28 PM | Mountain Standard Time | |
8/30/2022 1:44:28 PM | Central Standard Time | |
8/30/2022 2:44:28 PM | Eastern Standard Time | |
8/30/2022 6:44:28 PM | UTC | |
8/30/2022 7:44:28 PM | GMT Standard Time | |
8/30/2022 8:44:28 PM | Central European Standard Time | |
8/30/2022 8:44:28 PM | Romance Standard Time | |
8/30/2022 8:44:28 PM | W. Europe Standard Time | |
8/31/2022 12:14:28 AM | India Standard Time | |
8/31/2022 3:44:28 AM | Tokyo Standard Time | |
8/31/2022 4:44:28 AM | AUS Eastern Standard Time | |
Returns the times of various time zones in standard Markdown format. | |
.EXAMPLE | |
Get-StandardTimes -Ish | |
Time Zone | |
---- ---- | |
8/30/2022 11:46:00 AM Pacific Standard Time | |
8/30/2022 12:46:00 PM Mountain Standard Time | |
8/30/2022 1:46:00 PM Central Standard Time | |
8/30/2022 2:46:00 PM Eastern Standard Time | |
8/30/2022 6:46:00 PM UTC | |
8/30/2022 7:46:00 PM GMT Standard Time | |
8/30/2022 8:46:00 PM Central European Standard Time | |
8/30/2022 8:46:00 PM Romance Standard Time | |
8/30/2022 8:46:00 PM W. Europe Standard Time | |
8/31/2022 12:16:00 AM India Standard Time | |
8/31/2022 3:46:00 AM Tokyo Standard Time | |
8/31/2022 4:46:00 AM AUS Eastern Standard Time | |
Rounds the tiem zone object down to the nearest minute. | |
.EXAMPLE | |
Get-StandardTimes -Time $(Get-Date -hour 7) | |
Produces the same output but for Hour 7 in your local time zone. | |
#> | |
[CmdletBinding()] | |
param ( | |
[Parameter(HelpMessage = "Provide a time to convert to common time zones." , Mandatory = $FALSE,ValueFromPipeline = $true )] | |
[datetime]$Time = $(Get-Date), | |
[Parameter(HelpMessage = "Provide the output as Markdown" , Mandatory = $FALSE)] | |
[switch]$AsMarkdown, | |
[Parameter(HelpMessage = "Specify Accuracy" , Mandatory = $FALSE)] | |
[switch]$Ish | |
) | |
begin{ | |
Function ConvertTo-Markdown { | |
[CmdletBinding()] | |
[OutputType([string])] | |
Param ( | |
[Parameter( | |
Mandatory = $true, | |
Position = 0, | |
ValueFromPipeline = $true | |
)] | |
[PSObject[]]$InputObject | |
) | |
Begin { | |
$items = @() | |
$columns = @{} | |
} | |
Process { | |
ForEach($item in $InputObject) { | |
$items += $item | |
$item.PSObject.Properties | %{ | |
if($_.Value -ne $null){ | |
if(-not $columns.ContainsKey($_.Name) -or $columns[$_.Name] -lt $_.Value.ToString().Length) { | |
$columns[$_.Name] = $_.Value.ToString().Length | |
} | |
} | |
} | |
} | |
} | |
End { | |
ForEach($key in $($columns.Keys)) { | |
$columns[$key] = [Math]::Max($columns[$key], $key.Length) | |
} | |
$header = @() | |
ForEach($key in $columns.Keys) { | |
$header += ('{0,-' + $columns[$key] + '}') -f $key | |
} | |
$header -join ' | ' | |
$separator = @() | |
ForEach($key in $columns.Keys) { | |
$separator += '-' * $columns[$key] | |
} | |
$separator -join ' | ' | |
ForEach($item in $items) { | |
$values = @() | |
ForEach($key in $columns.Keys) { | |
$values += ('{0,-' + $columns[$key] + '}') -f $item.($key) | |
} | |
$values -join ' | ' | |
} | |
} | |
} | |
} | |
process{ | |
$localTimeZone = $(Get-TimeZone).id | |
$alternateTimeZones = @("Pacific Standard Time","Mountain Standard Time","Central Standard Time","Eastern Standard Time","UTC","GMT Standard Time","Central European Standard Time","Romance Standard Time","W. Europe Standard Time","India Standard Time","Tokyo Standard Time","AUS Eastern Standard Time") | |
if($ish.IsPresent){ | |
$time = Get-Date $time -Millisecond 0 -Second 0 | |
} | |
$times = foreach($timeZone in $alternateTimeZones){ | |
[PSCustomObject]@{ | |
Time = [System.TimeZoneInfo]::ConvertTimeBySystemTimeZoneId($Time,"$timeZone") | |
Zone = $timeZone | |
} | |
} | |
if($AsMarkdown.IsPresent){ | |
$times = ConvertTo-Markdown -InputObject $times | |
return $times | |
} | |
else{ | |
return $times | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment