我在将字符串转换为日期时遇到了一个奇怪的问题:
NSString *goodDateString = @"2012-06-28 16:08:56.871000";
NSString *badDateString = @"2012-06-28 16:11:17.999771";
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss.SSS"];
NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
[formatter setTimeZone:timeZone];
NSDate *goodDate = [formatter dateFromString:goodDateString];
NSDate *badDate = [formatter dateFromString:badDateString];
NSAssert(goodDate, @"date is nil"); //passes this test
NSAssert(badDate, @"date is nil"); //fails this test
出于某种原因,当我尝试将其转换为日期时,badDateString返回nil。我不知道为什么。日期字符串有问题吗?
编辑:字符串来自Python服务器。我在此日期使用dateString = date.strftime('%Y-%m-%d %H:%M:%S.%f')
:2012-06-28 16:11:17
返回2012-06-28 16:11:17.999771
,无法通过上面的日期格式化程序进行解析。任何python人都知道如何将日期的最后部分限制为3位小数而不是6位?
答案 0 :(得分:3)
看起来它可能是一个错误。它与SSS
将小数秒999771向下舍入到下一整秒并且由于某种原因导致格式失败的事实有关。如果您将小数秒数更改为999499
它会起作用,但只需将其更改为9995
就会导致失败。我会考虑归档bug report并将其添加到Open Radar。在平均时间内,只需编写代码来截断超过3位数的小数秒。