7vi*_*am7 3 c# datetime nsdate ios xamarin
我需要转换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);
}
Run Code Online (Sandbox Code Playgroud)
但事实证明,这种方式无法解决夏令时问题。
例如。DateTimeDST中时间为5AM的对象返回NSDate的时间为6AM。
基于以下输入:\n https://forums.xamarin.com/discussion/27184/convert-nsdate-to-datetime \xe2\x80\xa8
\n\nLocal Time期间发生变化Daylight Saving。\n因此,始终转换为UTC进行计算,然后Local time在需要时转换为。
public static DateTime NSDateToDateTime (Foundation.NSDate date)\n {\n DateTime reference = new DateTime(2001, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);\n var utcDateTime = reference.AddSeconds(date.SecondsSinceReferenceDate);\n return utcDateTime.ToLocalTime();\n }\n\n public static Foundation.NSDate DateTimeToNSDate (DateTime date)\n {\n DateTime reference = new DateTime(2001, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);\n var utcDateTime = date.ToUniversalTime();\n return Foundation.NSDate.FromTimeIntervalSinceReferenceDate((utcDateTime - reference).TotalSeconds);\n }\nRun Code Online (Sandbox Code Playgroud)\n
我很确定这是一种过时的方法。您现在可以将NSDate直接转换为DateTime。
Foundation.NSDate nsDate = // someValue
DateTime dateTime = (DateTime)nsDate;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1723 次 |
| 最近记录: |