0

我正在尝试将当前时间转换为中央标准时间。使用 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 获取不同时区的当前时间?

4

1 回答 1

2

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

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

编辑:如果找不到您感兴趣的区域,FindSystemTimeZoneById 应该抛出一个,但我想知道在这种情况下它是否只是返回。TimeZoneNotFoundExceptionnull

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

TimeZoneInfo cst = TimeZoneInfo.FindSystemTimeZoneById("America/Chicago");
于 2012-10-23T13:28:06.963 回答