[英]Xamarin 'iOS Foundation NSDate to C# DateTime conversion' and vice versa not accounting for DayLight saving
我需要将Cocoa NSDate
转换为C# DateTime
,反之亦然。
我使用以下方法来实现此目的:
public static DateTime NSDateToDateTime (Foundation.NSDate date)
{
DateTime reference = TimeZone.CurrentTimeZone.ToLocalTime (
new DateTime (2001, 1, 1, 0, 0, 0));
return reference.AddSeconds (date.SecondsSinceReferenceDate);
}
public static Foundation.NSDate DateTimeToNSDate (DateTime date)
{
DateTime reference = TimeZone.CurrentTimeZone.ToLocalTime (
new DateTime (2001, 1, 1, 0, 0, 0));
return Foundation.NSDate.FromTimeIntervalSinceReferenceDate (
(date - reference).TotalSeconds);
}
但事实证明,这种方式并不能解决夏令时问题。
例如。 在DST中时间为5AM的DateTime
对象返回NSDate
,时间为6AM。
我很确定这是一种过时的方法。 您现在可以将NSDate直接转换为DateTime。
Foundation.NSDate nsDate = // someValue
DateTime dateTime = (DateTime)nsDate;
基于以下输入: https : //forums.xamarin.com/discussion/27184/convert-nsdate-to-datetime
Daylight Saving
期间的Local Time
更改。 因此,始终转换为UTC
进行计算,然后根据需要转换为Local time
。
public static DateTime NSDateToDateTime (Foundation.NSDate date)
{
DateTime reference = new DateTime(2001, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
var utcDateTime = reference.AddSeconds(date.SecondsSinceReferenceDate);
return utcDateTime.ToLocalTime();
}
public static Foundation.NSDate DateTimeToNSDate (DateTime date)
{
DateTime reference = new DateTime(2001, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
var utcDateTime = date.ToUniversalTime();
return Foundation.NSDate.FromTimeIntervalSinceReferenceDate((utcDateTime - reference).TotalSeconds);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.