创建NSDate Monotouch

Bry*_*yan 14 .net c# iphone nsdate xamarin.ios

我正在尝试使用日期字符串并将其转换为特定的NSDate(例如,1981年7月1日),但我没有看到和设置日期的方法.有谁知道如何做到这一点?也许将DateTime对象转换为NSDate?

Mar*_*l W 24

最简单的方法是从DateTime设置它.

修订:NSDate转换运算符现在是显式的,不再是隐式的!我更新了下面的例子.

如果你看一下NSDate原型,你会发现两个运算符:

    public static explicit operator NSDate(DateTime dt);
    public static explicit operator DateTime(NSDate d);
Run Code Online (Sandbox Code Playgroud)

这两个将为您进行转换.

NSDate与DateTime的显式转换非常好,但您必须知道NSDate始终是UTC时间,而DateTime默认设置为DateTimeKind.Unspecified(从数据库读取时)或DateTimeKind.Locale(使用DateTime.Tocale设置时) ).在没有复杂的时区计算的情况下进行转换的最佳方法是强制使用正确的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);
Run Code Online (Sandbox Code Playgroud)

  • 我建议添加以下行以确保正确转换`date = date.ToLocalTime();除了你提到的内容之外,我还能完美地工作.感谢您的指导. (4认同)

dal*_*oto 9

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);
}
Run Code Online (Sandbox Code Playgroud)

这应该有所帮助

亚历克斯

  • 这没有考虑NSDate处理内容和datetime如何处理之间的时区差异. (4认同)

dea*_*rne -2

您想查看NSDateFormatter类:)

您的代码将如下所示。。。

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MMM dd, yyyy HH:mm"];

NSDate *parsed = [formatter dateFromString:dateString];
Run Code Online (Sandbox Code Playgroud)

S

PS 示例从这个问题中随意复制:)