创建NSDate Monotouch

时间:2010-01-27 17:18:58

标签: c# .net iphone xamarin.ios nsdate

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

5 个答案:

答案 0 :(得分:24)

最简单的方法是从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(当设置为DateTime.Today)。 没有复杂的时区计算的最佳转换方法是强制使用正确的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);

答案 1 :(得分: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);
}

这应该有帮助

亚历

答案 2 :(得分:1)

试试这个:

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

答案 3 :(得分:0)

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/

答案 4 :(得分:-2)

您想查看NSDateFormatter类:)

您的代码看起来像这样。 。

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

NSDate *parsed = [formatter dateFromString:dateString];

取值

this question

复制的PS示例