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 处理程序中,我仔细检查了 Locale 和 TimeZone 是否与设置的相同。时区是 Europe/Dublin 和 Locale 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

之后var date = DateTime ...,添加以下内容:

if (date.IsDaylightSavingTime ())
    date = date.AddHours (1);
于 2013-09-10T15:31:06.353 回答
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 回答