【发布时间】:2011-06-27 08:45:14
【问题描述】:
我正在 NSDate 上编写一个类别,以从 ISO 8601 字符串表示 (YYYYMMDD) 创建一个 NSDate。
即使我通过了 20010226,我还是会回到 2001-02-25 23:00:00 +0000。我做错了什么?
这是代码:
-(id) initWithISO8601Date: (NSString *) iso8601Date{
// Takes a date in the YYYYMMDD form
int year = [[iso8601Date substringWithRange:NSMakeRange(0, 4)] integerValue];
int month = [[iso8601Date substringWithRange:NSMakeRange(4, 2)] integerValue];
int day = [[iso8601Date substringWithRange:NSMakeRange(6,2)] integerValue];
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setYear:year];
[comps setMonth:month];
[comps setDay:day];
self = [[NSCalendar currentCalendar] dateFromComponents:comps];
NSLog(@"%@", self);
[comps release];
return self;
}
【问题讨论】:
-
您可能对我的 ISO 8601 解析器和反解析器感兴趣:bitbucket.org/boredzo/iso-8601-parser-unparser 它处理所有有效的 ISO 8601 格式,包括分隔符。
标签: cocoa-touch cocoa nsdate nscalendar nsdatecomponents