我正在尝试将当前时间转换为中央标准时间。使用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获取不同时区的当前时间?
答案 0 :(得分:2)
一种可能的解决方法是自己调用三参数版本:
var zoned = TimeZoneInfo.ConvertTime(DateTime.UtcNow, TimeZoneInfo.Utc, cst);
编辑:FindSystemTimeZoneById
如果找不到您感兴趣的区域,会抛出TimeZoneNotFoundException
,但我想知道在这种情况下它是否只是返回{ {1}}。
MonoDroid上的时区ID可能是TZDB,在这种情况下您可以尝试使用:
null