NSDateFormatter dateFromString returns nil 对于一个特定的日期
NSDateFormatter dateFromString returns nil for one specific date
我的日期格式化程序 return 一个特定日期为零:“1998 年 3 月 20 日”。
+ (NSDate*)dateFromString:(NSString*)date
{
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setLocale:[NSLocale currentLocale]];
if ([WPRConverter isUropeanMetrics])
[df setDateFormat:@"dd MMM, yyyy"];
else
[df setDateFormat:@"MMM dd, yyyy"];
return [df dateFromString:date];
}
我检查了临近的日期,并且都return编辑正确:
- “1997 年 3 月 20 日”
- “1999 年 3 月 20 日”
- “1998 年 3 月 21 日”
- “1998 年 3 月 19 日”
我的语言环境是 "en_US"。
使用 [NSDateFormatter getObjectValue:forString:range:error:] 得到错误:
The value “20 Mar, 1998” is invalid. FailureReason: The value “20 Mar,
1998” is invalid. RecoverySuggestion: Please provide a valid value.
RecoveryOptions: Code: 2048
这与以色列的 timeZone
有关,以色列有一个夏令时更改(参见 http://timeanddate.com/time/change/israel/karmiel?year=1998)。
将时区更改为 GMT:
formatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0]
应该可以解决问题。
我的日期格式化程序 return 一个特定日期为零:“1998 年 3 月 20 日”。
+ (NSDate*)dateFromString:(NSString*)date
{
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setLocale:[NSLocale currentLocale]];
if ([WPRConverter isUropeanMetrics])
[df setDateFormat:@"dd MMM, yyyy"];
else
[df setDateFormat:@"MMM dd, yyyy"];
return [df dateFromString:date];
}
我检查了临近的日期,并且都return编辑正确:
- “1997 年 3 月 20 日”
- “1999 年 3 月 20 日”
- “1998 年 3 月 21 日”
- “1998 年 3 月 19 日”
我的语言环境是 "en_US"。
使用 [NSDateFormatter getObjectValue:forString:range:error:] 得到错误:
The value “20 Mar, 1998” is invalid. FailureReason: The value “20 Mar, 1998” is invalid. RecoverySuggestion: Please provide a valid value. RecoveryOptions: Code: 2048
这与以色列的 timeZone
有关,以色列有一个夏令时更改(参见 http://timeanddate.com/time/change/israel/karmiel?year=1998)。
将时区更改为 GMT:
formatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0]
应该可以解决问题。