使用NSDateFormatter将字符串转换为NSDate,返回1年差异

Ank*_*ava 1 iphone objective-c nsdate nsdateformatter ios

我有一个UTC格式的字符串日期:

"2012-11-20T05:23:02.34"

现在我想要UTC NSDate对象......我实现了这个功能.

+ (NSDate *)utcDateFromString:(NSString *)string withFormat:(NSString *)format {
    NSDateFormatter *inputFormatter = [[NSDateFormatter alloc] init];
    inputFormatter.timeZone =[NSTimeZone timeZoneWithAbbreviation:@"UTC"];
    [inputFormatter setDateFormat:format];
    NSDate *date = [inputFormatter dateFromString:string];
    [inputFormatter release];
    return date;
}
Run Code Online (Sandbox Code Playgroud)

并称之为......

NSDate* submittedDate =[NSDate utcDateFromString:submittedDateString withFormat:@"YYYY-MM-dd'T'HH:mm:ss.SS"];
Run Code Online (Sandbox Code Playgroud)

但是这会返回NSDate描述.

2011-11-20 05:23:02 +0000

现在,如果你注意到日期有一年的差异......任何人都可以解释为什么会发生这种情况......?

谢谢你的帮助.

Ila*_*ian 5

在dateformmater中,使用yyyy而不是YYYY

它应该是

NSDate* submittedDate =[NSDate utcDateFromString:submittedDateString withFormat:@"yyyy-MM-dd'T'HH:mm:ss.SS"];
Run Code Online (Sandbox Code Playgroud)

这将解决问题.

在以下链接中,搜索YYYY.

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html

它使用yyyy来指定年份组件.一个常见的错误是使用YYYY.yyyy指定日历年,而YYYY指定ISO年度日历中使用的年份("年度周").在大多数情况下,yyyy和YYYY会产生相同的数字,但它们可能会有所不同.通常,您应该使用日历年.