2016-04-25 99 views
1

我想将Indian DateTime对象转换为Eastern DateTime对象。意思是我想改变特定DateTime对象的时区。为此,我写了下面的代码:TimeZone Not Found异常

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编辑器中运行我的代码。我有iMac系统。 我想为iPhone设备运行此代码。

+0

是您_really_确定您的系统具有这些ID在注册表项'HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ CurrentVersion \ Time Zones'?你有没有使用'GetSystemTimeZones'方法并检查结果?你的环境/平台是什么? –

+0

@SonerGönül,我还没有使用过GetSystemTimeZones。我可以使用iPhone设备的上述代码吗? – Siddharth

+0

也许你应该添加你使用Mono的平台。 –

回答

0

从MSDN https://msdn.microsoft.com/en-us/library/system.timezoneinfo.findsystemtimezonebyid(v=vs.110).aspxenter link description here

FindSystemTimeZoneById尝试匹配ID到HKEY_LOCAL_MACHINE \ SOFTWARE \注册表中的Microsoft \ Windows NT的\ CURRENTVERSION \ Time区域分公司在Windows XP和Windows Vista中的子项的名称。该分支不一定包含全面的时区标识符列表。如果应用程序需要,您可以通过调用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和例子插入。

+0

这并不回答问题,如果您从另一个链接复制某些内容,请至少提供一些属性。 HTTP:// stackexchange。com/legal/ –

3

“印度标准时间”在我的电脑上不存在。

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

出:

  • 日界线标准时间
  • 你可以列出他们喜欢列表中的所有PC上的支持时区(我注意到,这可以在其他电脑不同) UTC-11
  • 夏威夷标准时间
  • ...
+0

它实际上是一个以“(UTC + 05:30)Chennai,Kolkata,Mumbai,New Delhi”显示的时区。 –