Skip to content

Instantly share code, notes, and snippets.

@JordanTheITGuy
Created August 30, 2022 19:09
Show Gist options
  • Save JordanTheITGuy/b1b3d76d350c4b525ba5a504d57bd747 to your computer and use it in GitHub Desktop.
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.
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