8

Monotouch UIDatePicker が 1 時間遅れているという問題があります。これは、タイムゾーンまたは同様のものと関係があると思います。UIDatePicker の TimeZone と Locale を明示的に設定しようとしましたが、これは役に立たないようです。

datePicker.Locale = NSLocale.CurrentLocale;
datePicker.TimeZone = NSTimeZone.LocalTimeZone;

ValueChanged ハンドラーの次の行は、ユーザー インターフェイスで選択した時刻より 1 時間早い値を返します。

var date = DateTime.SpecifyKind((s as UIDatePicker).Date, DateTimeKind.Local).ToLocalTime();

ValueChanged Handler で、Locale と TimeZone が設定されたものと同じであることを再確認しました。TimeZone は Europe/Dublin で、ロケールは en_US です。この情報は以下によって取得されました:

datePicker.Locale.LocaleIdentifier;
datePicker.DatePicker.TimeZone;

私が見逃している別のステップはありますか?

ありがとう!

4

3 に答える 3

12

DatePicker から返される日付は UTC 形式です。UTC を現地時間に変換するには、いくつかの方法があります。この回答が示すように ToLocalTime が最適です。

DateTime.SpecifyKind(datePicker.Date, DateTimeKind.Utc).ToLocalTime();
于 2013-09-13T02:59:11.567 に答える
2

この魔法のコードは、夏時間とタイムゾーンに関する私のすべての問題を解決しました。助けが必要な場合は書いてください。

NSDate sourceDate = date;

NSTimeZone sourceTimeZone = new NSTimeZone ("UTC");
NSTimeZone destinationTimeZone = NSTimeZone.LocalTimeZone;

int sourceGMTOffset = sourceTimeZone.SecondsFromGMT (sourceDate);
int destinationGMTOffset = destinationTimeZone.SecondsFromGMT (sourceDate);
int interval = destinationGMTOffset - sourceGMTOffset;

var destinationDate = sourceDate.AddSeconds (interval);

var dateTime = new DateTime(2001, 1, 1, 0, 0,0).AddSeconds(destinationDate.SecondsSinceReferenceDate);

DescriptionLabel.Text = dateTime.ToString ("dd.MM.yyyy. HH:mm");
this.date = destinationDate;
于 2013-09-12T08:42:02.030 に答える