【发布时间】:2010-01-27 17:18:58
【问题描述】:
我正在尝试获取日期字符串并将其转换为特定的 NSDate(例如 1981 年 7 月 1 日),但我没有看到设置日期的方法。有谁知道如何做到这一点?也许将 DateTime 对象转换为 NSDate?
【问题讨论】:
标签: c# .net iphone xamarin.ios nsdate
我正在尝试获取日期字符串并将其转换为特定的 NSDate(例如 1981 年 7 月 1 日),但我没有看到设置日期的方法。有谁知道如何做到这一点?也许将 DateTime 对象转换为 NSDate?
【问题讨论】:
标签: c# .net iphone xamarin.ios nsdate
最简单的方法是从 DateTime 设置它。
修订:NSDate 转换运算符现在是显式的,不再是隐式的!我更新了下面的示例。
如果您查看 NSDate 原型,您会发现两个运算符:
public static explicit operator NSDate(DateTime dt);
public static explicit operator DateTime(NSDate d);
这两个将为您完成转换。
NSDate 与 DateTime 的显式转换非常好,但您必须注意 NSDate 始终是 UTC 时间,并且 DateTime 默认设置为 DateTimeKind.Unspecified(从数据库读取时)或 DateTimeKind.Locale(设置为日期时间。今天)。 无需复杂时区计算的最佳转换方法是强制使用正确的 DateTimeKind:
// Set NSDate:
DateTime date = DateTime.Parse("1981-07-01")
NSDate nsDate = (NSDate)DateTime.SpecifyKind(date, DateTimeKind.Utc);
// Get DateTime from NSDate:
date = DateTime.SpecifyKind((DateTime)nsDate, DateTimeKind.Unspecified);
【讨论】:
date = date.ToLocalTime (); 除了您提到的内容之外,我还可以完美地工作。感谢您的指导。
date = DateTime.SpecifyKind(nsDate, DateTimeKind.Unspecified); 这对我来说给出了错误的日期
public static DateTime NSDateToDateTime(MonoTouch.Foundation.NSDate date)
{
return (new DateTime(2001,1,1,0,0,0)).AddSeconds(date.SecondsSinceReferenceDate);
}
public static MonoTouch.Foundation.NSDate DateTimeToNSDate(DateTime date)
{
return MonoTouch.Foundation.NSDate.FromTimeIntervalSinceReferenceDate((date-(new DateTime(2001,1,1,0,0,0))).TotalSeconds);
}
这应该会有所帮助
亚历克斯
【讨论】:
试试这个:
private static NSDate DateTimeToNSDate(DateTime date)
{
NSCalendar calendar = NSCalendar.CurrentCalendar;
NSDateComponents comps = new NSDateComponents();
comps.Day = date.Day;
comps.Month = date.Month;
comps.Year = date.Year;
comps.Minute = date.Minute;
comps.Hour = date.Hour;
return calendar.DateFromComponents(comps);
}
【讨论】:
public NSDate ConvertDateTimeToNSDate(DateTime date)
{
DateTime newDate = TimeZone.CurrentTimeZone.ToLocalTime(
new DateTime(2001, 1, 1, 0, 0, 0) );
return NSDate.FromTimeIntervalSinceReferenceDate(
(date - newDate).TotalSeconds);
}
public DateTime ConvertNsDateToDateTime(NSDate date)
{
DateTime newDate = TimeZone.CurrentTimeZone.ToLocalTime(
new DateTime(2001, 1, 1, 0, 0, 0) );
return newDate.AddSeconds(date.SecondsSinceReferenceDate);
}
来源:https://theweeklybyte.wordpress.com/2014/05/27/convert-datetime-to-nsdate-and-back/
【讨论】:
你想看看NSDateFormatter类:)
您的代码将如下所示。 . .
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MMM dd, yyyy HH:mm"];
NSDate *parsed = [formatter dateFromString:dateString];
S
PS 示例大量复制自this question :)
【讨论】: