访问当前系统时区

时间:2016-05-15 10:39:02

标签: c# unity3d timezone system monodevelop

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

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

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

enter image description here

在这个列表中,我想知道,我现在的系统是哪一个? 因为我想要有关该时区的具体信息。就像下面的代码一样,我写得很清楚" Asia / Kolkata"。

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。

6 个答案:

答案 0 :(得分:2)

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

TimeZoneInfo infos = TimeZoneInfo.Local;

答案 1 :(得分:1)

答案 2 :(得分:1)

使用此

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

您可以在TimeZoneIds

中看到此链接

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

答案 3 :(得分:1)

将.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

答案 4 :(得分: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);
    }
}

答案 5 :(得分:0)

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