Determine Daylight Savings status for different time zone in Powershell

后端 未结 3 2052
南笙
南笙 2021-01-14 10:17

Is there a slick way in PowerShell to ascertain if a past date in another time zone is Daylight Savings or not? Here is the situation, our database is in Europe and the tim

相关标签:
3条回答
  • 2021-01-14 10:22

    There is no need to try to determine whether DST is in effect or not. Just let the .NET Framework do the conversion for you.

    First, decide which time zone IDs you are converting from and to.

    You said your input time was in Europe, but you didn't specify exactly where. Like the US, Europe has multiple time zones. I'll assume you meant CET/CEST (UTC+1/+2). In Windows, you can use any of the following identifiers for this:

    • "Central Europe Standard Time"
    • "Central European Standard Time"
    • "Romance Standard Time" (why? who knows.)
    • "W. Europe Standard Time" (don't get fooled by the name, it's still central)

    These are all the same (in Windows) except for their display names. If you want to be precise in which one you pick, refer to the CLDR reference.

    For the US Central time zone, use "Central Standard Time".

    Then just use the TimeZoneInfo.ConvertTimeBySystemTimeZoneId function, as follows:

    # collect your input (through db, or whatever mechanism you have)
    $inputDateTime = Get-Date -Date "2017-06-27 00:00:00"
    
    # pick your time zones
    $fromTimeZone = "Central Europe Standard Time"  # EU
    $toTimeZone = "Central Standard Time"           # USA
    
    # convert
    $outputDateTime = [System.TimeZoneInfo]::ConvertTimeBySystemTimeZoneId(
      $inputDateTime, $fromTimeZone, $toTimeZone)
    
    # output
    Write-Output $outputDateTime
    
    0 讨论(0)
  • 2021-01-14 10:33

    Cole, I love the inspiration as your response was a needle in a haystick and just what I needed. However, it produced an error. After some messing around, I got the following to work:

    $isDST = ([System.TimeZoneInfo]::ConvertTimeFromUtc((Get-Date).ToUniversalTime(), [System.TimeZoneInfo]::FindSystemTimeZoneById("Central Standard Time"))).IsDaylightSavingTime()
    

    (in PowerShell v4)

    0 讨论(0)
  • 2021-01-14 10:46

    I know this is an older thread, but I actually needed to be able to determine whether or not it's DST currently. We have a server whose local TZ is set to UTC (which doesn't see DST) and have an automation that needs to be able to know when it's 4pm local time. So the script is all in UTC, but I can then add an hour or not based on the value of the result of this beast:

    $DST = ([System.TimeZoneInfo]::ConvertTimeFromUtc(
        (get-date).ToString(),
        [System.TimeZoneInfo]::FindSystemTimeZoneById("Central Standard Time")
    )).isdaylightsavingtime()
    
    0 讨论(0)
提交回复
热议问题