UIDatePicker的时区问题日期:1小时错误

时间:2013-09-06 11:35:58

标签: c# datetime xamarin.ios uidatepicker utc

我遇到了Monotouch UIDatePicker落后1小时的问题。我认为这与Time Zones或类似的东西有关。我已经尝试明确设置我的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是欧洲/都柏林和Locale en_US。 该信息由以下人员检索:

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

我还缺少另一个步骤吗?

谢谢!

3 个答案:

答案 0 :(得分:10)

DatePicker返回的日期是UTC格式。有几种将UTC转换为本地时间的方法。正如this回答说ToLocalTime是最好的。

DateTime.SpecifyKind(datePicker.Date, DateTimeKind.Utc).ToLocalTime();

答案 1 :(得分:3)

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

if (date.IsDaylightSavingTime ())
    date = date.AddHours (1);

答案 2 :(得分: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;