【问题标题】:Assemble date object from integers?从整数组装日期对象?
【发布时间】:2011-01-20 05:52:56
【问题描述】:

给定三个整数,分别代表日、月和年,什么代码可以将这些整数组合成一个日期对象?

【问题讨论】:

    标签: objective-c ios cocoa-touch nsdate nsinteger


    【解决方案1】:

    你应该看看NSDateComponents

    int y = 2011;
    int m = 1;
    int d = 15;
    
    
    NSDateComponents *dc = [[NSDateComponents alloc] init];
    [dc setYear:y];
    [dc setMonth:m];
    [dc setDay:d];
    
    NSLog(@"%@: %@", [[dc date] class], [dc date]);
    

    【讨论】:

    • +1 原则上是正确的,但实现是错误的。 NSDateComponents 没有 -date 方法,但您可以使用 NSCalendar 将其转换为 NSDate
    • 我仔细检查了NSDateComponents 类文档(iOS 4.2 文档集),发现-date 方法位于calendarday 方法之间。我错过了什么吗?
    • 啊,我检查了 Mac OS X 10.6 文档集,NSDateComponents 确实没有 -date 方法。这个问题有 iOS 标签,所以我认为它是针对 Cocoa Touch 的。
    【解决方案2】:

    NSDateFormatter 使用Unicode Standard 将日期字符串解析为日期。因此,将整数格式化为日期字符串,然后使用 NSDateFormatter 对其进行解析:

    // assume year, month and day are integers that are formatted properly and don't
    // include invalid ranges
    NSString* dateString = [NSString stringWithFormat:@"%04d %02d %02d", year, month, day];
    NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
    // Choose a format of YEAR MONTH DATE per the standard
    [formatter setDateFormat:@"yyyy MM dd"];
    NSDate* date = [formatter dateFromString:dateString];
    [formatter release];
    

    您可以将格式字符串设置为任何格式,只要您使用 Unicode 标准(上面链接)并将整数转换为相同的格式(显然)。

    【讨论】:

    • 您可能想要 yyyy 而不是 YYYY...大写字母为您提供了疯狂的 ISO 周历 iirc。
    • @Catfish_Man 你是对的,我的意思是 yyyy 数字而不是 ISO 年-周数字!谢谢!
    猜你喜欢
    • 1970-01-01
    • 2020-11-26
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多