2017-04-18 55 views
1

我需要将Cocoa NSDate转换为C# DateTime,反之亦然。Xamarin的'iOS基金会NSDate到C#日期时间转换',反之亦然,不考虑DayLight保存

我使用下面的方法来实现这一目标:

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); 
} 

但事实证明,这种方式是不占夏令。

例如, DateTime DST中时间为5AM的对象在时间6AM返回NSDate

回答

0

基于来自输入:期间Daylight Saving https://forums.xamarin.com/discussion/27184/convert-nsdate-to-datetime

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); 
    } 
+0

我觉得这是一个过时的方法,请看我的答案 –

0

我很确定这是一个过时的方法。您现在可以直接将NSDate强制转换为DateTime。

Foundation.NSDate nsDate = // someValue 
DateTime dateTime = (DateTime)nsDate; 
相关问题