繁体   English   中英

Xamarin'iOS基础NSDate到C#DateTime转换',反之亦然,不考虑DayLight节省

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM