Long form name of timezone in NodaTime

后端 未结 3 830
灰色年华
灰色年华 2021-01-18 23:56

In NodaTime, how do you find the long form name of a timezone given the tz timezone id?

For example, if I supply \"America/Los_Angeles\", I should get \"Pacific Stan

3条回答
  •  走了就别回头了
    2021-01-19 00:29

    TZDB itself doesn't hold descriptions for timezones: the timezone with ID America/Los_Angeles simply holds transitions with names such as "PDT" and "PST". So from that point of view, the data simply isn't there.

    That said, you can get the Windows timezone IDs that map to a given TZDB zone (originally from the CLDR windowsZones.xml data), and Windows generally does use names like "Pacific Standard Time" for its zone IDs.

    e.g.

    var source = TzdbDateTimeZoneSource.Default;
    var windowsIds = (from item in source.WindowsMapping.PrimaryMapping
        where item.Value == "America/Los_Angeles"
        select item.Key).ToList();
    

    However, there are some caveats with this approach:

    • As shown above, there may be any number of Windows zone IDs that map to a given TZDB zone. In the current data, this is always zero or one (Europe/Vienna being an example of a TZDB zone that no Windows zone ID uses), but there's no reason in theory that you couldn't find two or more Windows zone IDs mapping to the same TZDB zone.
    • Some of the Windows zone IDs aren't particularly great: for example, Europe/London is mapped from a Windows zone called "GMT Standard Time", which isn't a great string to show to a user.

    However, for what you're doing, this might be acceptable.

提交回复
热议问题