【问题标题】:Building NSDate from integers (year ... second) with Cocoa/objective-C使用 Cocoa/objective-C 从整数(年...秒)构建 NSDate
【发布时间】:2011-07-15 10:48:00
【问题描述】:

我有 year, mont, ... ,第二个整数类型,我需要从它们构建 NSDate。 我试过这段代码,但我得到了(空)。

NSDateFormatter *tempFormatter = [[[NSDateFormatter alloc]init]autorelease];
[tempFormatter setDateFormat:@"yyyy-mm-dd hh:mm:ss"];
NSString* message = [NSString stringWithFormat:@"%04d-%02d-%02d %02d:%02d:%02d", year, month, day, hour, minute, second];
NSDate *day3 = [tempFormatter dateFromString:message];

这段代码有什么问题?

【问题讨论】:

  • message 中生成的字符串是什么?它看起来有效吗?也粘贴到这里。
  • "2011-03-14 20:14:40" 是 NSLog(@"%@",message);

标签: objective-c cocoa nsdate


【解决方案1】:

使用日期组件创建NSDateComponents 会更直接,然后使用 NSCalendar 的dateFromComponents: 将其转换为日期。 The documentation for NSDateComponents 有一个如何做到这一点的例子:

NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setDay:day];
[comps setMonth:month];
[comps setYear:year];
[comps setHour:hour];
[comps setMinute:minute];
[comps setSecond:second];
NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *date = [cal dateFromComponents:comps];
[comps release];

【讨论】:

  • 这是一种更好的方法!另一种方法是有效地将整数日期“组件”转换为字符串,然后从那里转换为 NSDate!那肯定是自找麻烦。
  • 你不能使用NSGregorianCalendar...很遗憾,它已被弃用。彻底去掉NSCalendar *cal的初始化/释放,将date创建中的cal改成[NSCalendar currentCalendar]您不能再指定公历。 此外,您可以通过将行更改为以下内容来简化 comps 的创建:[NSDateComponents new];
  • @DDPWNAGE:根据this other post,基本上只是改名为NSCalendarIdentifierGregorian。如果当前日历是其他受支持的日历之一,则使用 [NSCalendar currentCalendar] 将无法正常工作。
【解决方案2】:

而不是

[tempFormatter setDateFormat:@"yyyy-mm-dd hh:mm:ss"];

[tempFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

【讨论】:

    猜你喜欢
    • 2011-04-24
    • 2010-09-07
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 2010-10-21
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    相关资源
    最近更新 更多