15

Web サービスからのデータを処理する 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ます。これにより、システムの TimeZone の日付と時刻が得られます。その時間を次のように目的のタイムゾーン時間に変換します

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 に答える