使用Cocoa框架,我如何将@"2008-12-29T00:27:42-08:00"解析为NSDate对象?标准-dateWithString:
不喜欢它.
您可以使用NSDateFormatter来解析日期:
NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"]; date = [dateFormatter dateFromString:dateStr];
在Unicode的日期格式的模式定义您可以用使用格式字符串setDateFormat:
的方法.
请注意,如果您的目标是10.4,那么您需要致电:[dateFormatter setFormatterBehavior:NSDateFormatterBehavior10_4];
.不需要iphone或leopard,因为此模式是默认模式.
如果您只需要处理ISO 8601格式(该字符串是一个示例),您可以尝试我的ISO 8601解析器和解析器.
实际上,您需要设置时区,日历和区域设置.如果您未设置区域设置,则用户启用了AM/PM时间,格式化程序将添加AM/PM标记!如果您没有设置时区,它将使用当前时区,但会将其标记为"Z"("Zulu"或GMT).如果你没有设置日历,那么拥有日本帝国历法的用户将拥有自当前皇帝提升以来的年数,而不是自耶稣基督诞生以来的年数.一定要在我提到的所有场景中进行测试!
NSDateFormatter * f = [[NSDateFormatter alloc] init]; [f setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"]; f.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0]; f.calendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease]; f.locale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease]; NSString * str = [f stringFromDate:someDate]; NSDate * date = [f dateFromString:dateStr];