MonoDroid和TimeZoneInfo.ConvertTime

时间:2012-10-23 13:23:00

标签: xamarin.android

我正在尝试将当前时间转换为中央标准时间。使用Mono和.NET,这些都可以工作。

TimeZoneInfo cst = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
TimeZoneInfo.ConvertTime(DateTime.UtcNow, cst);
TimeZoneInfo.ConvertTime(DateTime.Now, cst);

使用MonoDroid 3.0.4时,第一个出现此错误:

Unhandled Exception:
System.ArgumentException: Kind propery of dateTime is Utc but the sourceTimeZone does not equal TimeZoneInfo.Utc
  at System.TimeZoneInfo.ConvertTime (DateTime dateTime, System.TimeZoneInfo sourceTimeZone, System.TimeZoneInfo destinationTimeZone) [0x00000] in <filename unknown>:0 
  at System.TimeZoneInfo.ConvertTime (DateTime dateTime, System.TimeZoneInfo destinationTimeZone) [0x00000] in <filename unknown>:0 

,第二个给出了这个错误:

Unhandled Exception:
System.ArgumentNullException: Argument cannot be null.
Parameter name: destinationTimeZone
  at System.TimeZoneInfo.ConvertTime (DateTime dateTime, System.TimeZoneInfo     sourceTimeZone, System.TimeZoneInfo destinationTimeZone) [0x00000] in <filename unknown>:0 
  at System.TimeZoneInfo.ConvertTime (DateTime dateTime, System.TimeZoneInfo destinationTimeZone) [0x00000] in <filename unknown>:0 

与TimeZoneInfo.ConvertTimeBySystemTimeZoneId相同的问题。

无论如何使用MonoDroid获取不同时区的当前时间?

1 个答案:

答案 0 :(得分:2)

一种可能的解决方法是自己调用三参数版本:

var zoned = TimeZoneInfo.ConvertTime(DateTime.UtcNow, TimeZoneInfo.Utc, cst);

编辑:FindSystemTimeZoneById 如果找不到您感兴趣的区域,会抛出TimeZoneNotFoundException,但我想知道在这种情况下它是否只是返回{ {1}}。

MonoDroid上的时区ID可能是TZDB,在这种情况下您可以尝试使用:

null