15

我有 MonoTouch 应用程序,它处理来自网络服务的数据。此数据包含特定于时区的日期信息。时区是 UTC +12,适用于新西兰。

我的应用程序根据当前时间显示此数据。这样做的问题是,当应用程序在不同的 TimeZones 中使用时,数据无法正确显示,因为设备上的当前时间不正确。

无论设备上的语言环境/时区设置如何,如何获取 UTC +12 的当前日期时间?

编辑:

我根据以下答案尝试了以下代码:

TimeZoneInfo.ConvertTime (DateTime.Now, TimeZoneInfo.FindSystemTimeZoneById("Pacific/Auckland"));

此代码在我的计算机上运行良好,但是当我在 MonoTouch 中运行它时,出现以下异常:

System.ArgumentException: Kind propery of dateTime is Local but the sourceTimeZone does not equal TimeZoneInfo.Local
   at System.TimeZoneInfo.ConvertTime (DateTime dateTime, System.TimeZoneInfo sourceTimeZone, System.TimeZoneInfo destinationTimeZone) [0x00018] in /Developer/MonoTouch/Source/mono/mcs/class/System.Core/System/TimeZoneInfo.cs:179
   at System.TimeZoneInfo.ConvertTime (DateTime dateTime, System.TimeZoneInfo destinationTimeZone) [0x00000] in /Developer/MonoTouch/Source/mono/mcs/class/System.Core/System/TimeZoneInfo.cs:173
4

3 回答 3

41

使用DateTime.Now. 这将为您提供系统时区日期和时间。现在像这样将该时间转换为所需的时区时间

var indianTime = TimeZoneInfo.ConvertTime (DateTime.Now,
                 TimeZoneInfo.FindSystemTimeZoneById("India Standard Time"));

要获取 TimeZone 列表,请运行此方法

ReadOnlyCollection<TimeZoneInfo> zones = TimeZoneInfo.GetSystemTimeZones();
Console.WriteLine("The local system has the following {0} time zones", zones.Count);
foreach (TimeZoneInfo zone in zones)
    Console.WriteLine(zone.Id);
于 2012-09-15T05:46:35.113 回答
12

你可以这样做:

Datetime date = TimeZoneInfo.ConvertTime(utcDateTime, timeZone); 

只需传递给定的参数。

于 2012-09-15T05:46:50.497 回答
3

这是 MonoTouch 中的一个错误

该修复程序将包含在 MonoTouch 的未来版本中(虽然我不知道具体是哪个)。

无论如何,已经有可用的修补程序

于 2012-09-17T11:37:24.163 回答