**更新**使用dateFromString转换为NSDate会产生不正确的结果

时间:2014-03-31 15:43:09

标签: objective-c ios7 nsdate nsdateformatter

我有这些代码行,根据午夜后1秒开始的一周的第一个星期一创建一个开始日期:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd '00:00:01' a"];  //  one second after midnight
NSString *startDateString = [formatter stringFromDate:firstDayOfTheWeek];  

[formatter setDateFormat:@"yyyy-MM-dd hh:mm:ss a"];
NSDate *nsdStart = [formatter dateFromString:startDateString];  

startDateString 是2014-03-31 00:00:01 AM(这是正确的)

nsdStart 是2014-04-01 00:00:00 PDT(这是错误的!)

现在,我必须对结束日期做同样的事情,使用以下代码:

[formatter setDateFormat:@"yyyy-MM-dd '23:59:59' a"];  //  one second before midnight
NSString *endDateString = [formatter stringFromDate:lastDayOfTheWeek];  //  create end date string

[formatter setDateFormat:@"yyyy-MM-dd hh:mm:ss a"];
NSDate *nsdEnd = [formatter dateFromString:endDateString];  //  convert to NSDate

结果现在是: endDateString :2014-04-06 23:59:59 PM(这是正确的)

nsdEnd nil

为什么 nsdStart nsdEnd 与用于创建 nsd 日期的原始字符串日期不一样?

1 个答案:

答案 0 :(得分:2)

这里的问题是日期格式错误。

您应该使用'HH' 24小时时间格式而不是hh,看起来像日期格式器与23小时混淆,其格式为12

详细信息: Date Format Patterns