代码之家  ›  专栏  ›  技术社区  ›  Bryan

创建NSDate Monotouch

  •  14
  • Bryan  · 技术社区  · 16 年前

    我试图获取一个日期字符串,并将其转换为一个特定的NSDate(例如1981年7月1日),但我看不到设置日期的方法。有人知道如何做到这一点吗?也许可以将DateTime对象转换为NSDate?

    5 回复  |  直到 16 年前
        1
  •  25
  •   Marcel Wolterbeek    11 年前

    最简单的方法是从DateTime开始设置。

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

    如果查看NSDate原型,您会发现两个操作员:

        public static explicit operator NSDate(DateTime dt);
        public static explicit operator DateTime(NSDate d);
    

    这两个将为你做转换。

    NSDate与DateTime之间的显式转换非常好,但您必须知道NSDate始终是UTC时间,DateTime默认设置为DateTimeKind。未指定(从数据库读取时)或DateTimeKind。区域设置(使用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);
    
        2
  •  9
  •   dalexsoto    15 年前
    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);
    }
    

    这应该会有帮助

    亚历克斯

        3
  •  2
  •   tntwist    10 年前

    试试这个:

    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);
        }
    
        4
  •  0
  •   cegprakash    11 年前
    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/

        5
  •  -2
  •   Community Mohan Dere    9 年前

    你想看看 NSDateFormatter 班级:)

    你的代码看起来像这样。

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

    s

    PS示例大量复制自 this question :)

    推荐文章