找不到TimeZone异常

时间:2016-04-25 10:59:08

标签: c# datetime timezone

我想将Indian DateTime对象转换为Eastern DateTime对象。意味着我想更改特定DateTime对象的时区。为此,我写了以下代码:

string easternZoneId = "Eastern Standard Time";
TimeZoneInfo easternZone = TimeZoneInfo.FindSystemTimeZoneById(easternZoneId);

string indianZoneId = "India Standard Time";
TimeZoneInfo indianZone = TimeZoneInfo.FindSystemTimeZoneById (indianZoneId);

DateTime d = TimeZoneInfo.ConvertTime (DateTime.Today, indianZone, easternZone);

当我尝试运行此语句时,我将在控制台中发现异常。

enter image description here

如何运行此代码?我想把时间转换成东部时间。

编辑:现在我在Unity Editor中运行我的代码。我有iMac系统。 我想为iPhone设备运行此代码。

2 个答案:

答案 0 :(得分:3)

我的电脑上不存在“印度标准时间”。您可以在PC上列出所有支持的时区(我已经注意到,这可能与其他PC的不同)列出如下:

var timeZones = TimeZoneInfo.GetSystemTimeZones(); 
foreach (TimeZoneInfo timeZone in timeZones)
{
    Console.WriteLine(timeZone.Id);
}

输出:

  • 日期标准时间
  • UTC-11
  • 夏威夷标准时间
  • ...

答案 1 :(得分:0)

来自msdn https://msdn.microsoft.com/en-us/library/system.timezoneinfo.findsystemtimezonebyid(v=vs.110).aspx enter link description here

FindSystemTimeZoneById尝试将id与Windows XP和Windows Vista下注册表的HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ CurrentVersion \ Time Zones分支的子项名称匹配。该分支不一定包含时区标识符的完整列表。如果应用程序需要,您可以通过调用CreateCustomTimeZone方法的一个重载或通过调用FromSerializedString来反序列化表示所需时区的TimeZoneInfo对象来创建特定时区。但是,这些方法调用创建的时区不包含在注册表中,并且无法使用FindSystemTimeZoneById方法检索。只能通过CreateCustomTimeZone或FromSerializedString方法调用返回的对象引用访问这些自定义时区。

方法用法示例:

 // Get Tokyo Standard Time zone
      TimeZoneInfo tst = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time");
      DateTime tstTime = TimeZoneInfo.ConvertTime(thisTime, TimeZoneInfo.Local, tst);      
      Console.WriteLine("Time in {0} zone: {1}", tst.IsDaylightSavingTime(tstTime) ?
                        tst.DaylightName : tst.StandardName, tstTime);
      Console.WriteLine("   UTC Time: {0}", TimeZoneInfo.ConvertTimeToUtc(tstTime, tst));

时区列表: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones

只需找到您的时区ID并插入示例中。