基本上我可以使用以下代码检测系统时区列表:
foreach(TimeZoneInfo info in tz)
Debug.Log("time zone id : " + info.Id + " display name : " + info.DisplayName);
运行此代码,我在控制台中有以下输出。
在这个列表中,我想知道,我现在的系统是哪一个? 因为我想要有关该时区的具体信息。就像下面的代码一样,我写得很清楚" 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。
答案 0 :(得分:2)
使用下面的代码可以获得本地TimeZoneInfo对象。
TimeZoneInfo infos = TimeZoneInfo.Local;
答案 1 :(得分:1)
也许可以帮助你这个链接:
这里 https://msdn.microsoft.com/en-us/library/gg154758.aspx
和
这里
List of Timezone ID's for use with FindTimeZoneById() in C#?
答案 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