基本上我可以使用以下代码检测系统时区列表:
foreach(TimeZoneInfo info in tz)
Debug.Log("time zone id : " + info.Id + " display name : " + info.DisplayName);
运行此代码,我在控制台中有以下输出。
在这个列表中,我想知道我当前的系统遵循的是哪一个? 因为我想要有关该时区的具体信息。就像下面的代码一样,我写得很清楚“亚洲/加尔各答”。
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。
使用下面的代码您可以获取本地 TimeZoneInfo 对象。
TimeZoneInfo infos = TimeZoneInfo.Local;
将 .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
用这个
TimeZoneInfo infos = TimeZoneInfo.FindSystemTimeZoneById(
{ "Asia/Kolkata", "India Standard Time" });
您可以查看 TimeZoneIds 的此链接
http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/zone_tzid.html
在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);
}
}
更新您的播放器设置以使用 .NET 4.6