访问当前系统时区

问题描述 投票:0回答:6

基本上我可以使用以下代码检测系统时区列表:

foreach(TimeZoneInfo info in tz)
    Debug.Log("time zone id : " + info.Id + " display name : " + info.DisplayName);

运行此代码,我在控制台中有以下输出。

enter image description here

在这个列表中,我想知道我当前的系统遵循的是哪一个? 因为我想要有关该时区的具体信息。就像下面的代码一样,我写得很清楚“亚洲/加尔各答”。

TimeZoneInfo infos = System.TimeZoneInfo.FindSystemTimeZoneById("Asia/Kolkata");

通过运行哪个代码,我可以获得“Asia/Kolkata”作为输出?

编辑:我已经在这里使用NodaTime并为此目的运行代码。

  // Create a NodaTime DateTimeZoneSource object for IANA time zone names
    var dateTimeZoneSource = TzdbDateTimeZoneSource.Default;

    // Get the Windows time zone by name (or use TimeZoneInfo.Local)
    var timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time");

    // Convert between Windows and IANA time zone names
    var tzdbTimeZoneInfo = dateTimeZoneSource.MapTimeZoneId(timeZoneInfo);

    Console.WriteLine(tzdbTimeZoneInfo);

但是在这方面,我遇到了例外,

抛出了“System.TimeZoneNotFoundException”类型的异常。

我使用Mac系统和编辑器作为Mono Develop - Unity,我的目标设备是iPhone。

c# unity-game-engine timezone
6个回答
4
投票

使用下面的代码您可以获取本地 TimeZoneInfo 对象。

TimeZoneInfo infos = TimeZoneInfo.Local;

3
投票

将 .NET API 兼容性设置为 4.6。以下是我的 iOS 设备上的测试结果:

TimeZoneInfo.Local.Id
Editor: Local
iOS Device: Local

TimeZoneInfo.Local.DisplayName
Editor: Local
iOS Device: (GMT+03:30) Local Time

TimeZoneInfo.Local.StandardName
Editor: +0330
iOS Device: +0330

TimeZoneInfo.Local.DaylightName
Editor: +0430
iOS Device: +0430

TimeZoneInfo.Local.BaseUtcOffset.Hours + ":" + TimeZoneInfo.Local.BaseUtcOffset.Minutes);
Editor: 3:30
iOS Device: 3:30


1
投票

用这个

TimeZoneInfo infos = TimeZoneInfo.FindSystemTimeZoneById(
             { "Asia/Kolkata", "India Standard Time" }); 

您可以查看 TimeZoneIds 的此链接

http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/zone_tzid.html


0
投票

在Unity5.1.3编辑器窗口中,TimeZoneInfo.GetSystemTimeZones()返回空列表。 TimeZoneInfo.FindSystemTimeZoneById() 和 TimeZoneInfo.CreateCustomTimeZone() 都会引发 System.TimeZoneNotFoundException。 但它在 Android 设备上运行良好。

private static DateTime ToSeoulTime(DateTime dateUtc, bool ignoreUnspecified = false)
{
    if (ignoreUnspecified == false && dateUtc.Kind == DateTimeKind.Unspecified)
    {
        if (UnityEngine.Application.isEditor)
        {
            throw new Exception("dateUtc.Kind == DateTimeKind.Unspecified");
        }
        else
        {
            UnityEngine.Debug.LogWarning("dateUtc.Kind == DateTimeKind.Unspecified");
        }
    }
    try
    {
        var seoulTimezone = TimeZoneInfo.FindSystemTimeZoneById("Korea Standard Time");
        return TimeZoneInfo.ConvertTime(dateUtc, seoulTimezone);
    }
    catch (System.TimeZoneNotFoundException e)
    {
        return new DateTime(dateUtc.AddHours(9).Ticks, DateTimeKind.Unspecified);
    }
}

0
投票

更新您的播放器设置以使用 .NET 4.6

© www.soinside.com 2019 - 2024. All rights reserved.