我正在使用NSDataDetector读取NSString日期/时间并将其交换为NSDate。
输入(lastRefreshStampString)是2014-05-05 02:54:45 +0000但是,一旦它被NSDataDetector处理,result.date就变成2014-05-05 14:54:45 +0000。出于某种原因,它将02视为PM并交换它。
如何更正此行为?
NSLog(@"lastRef:%@",lastRefreshStampString);
__block NSDate *lastRefreshStamp;
//Detect data format
NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingAllTypes error:nil];
[detector enumerateMatchesInString:lastRefreshStampString
options:kNilOptions
range:NSMakeRange(0, [lastRefreshStampString length])
usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop)
{ lastRefreshStamp = result.date; }];
NSLog(@"lastRef:%@",lastRefreshStamp);
答案 0 :(得分:2)
因为时区不同。 NSDataDetector
使用GTM
,但您的系统时区不是(我猜......)。
我有像你一样的测试,输出如下:
因此,您可以使用NSDateFormatter
NSDateFormatter
的默认时区与系统时区相同,这样您就可以获得正确的日期。
NSString *lastRefreshStampString = @"2014-05-05 02:54:45 +0000";
NSLog(@"lastRefString:%@",lastRefreshStampString);
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"];
NSLog(@"time zone : %@",dateFormatter.timeZone.name);
NSLog(@"system time zone : %@",[NSTimeZone systemTimeZone].name);
NSDate *lastRefreshStamp = [dateFormatter dateFromString:lastRefreshStampString];
NSLog(@"lastRef:%@",lastRefreshStamp);
输出正确:
答案 1 :(得分:0)
不要使用NSDataDetector来解析固定格式的日期。 NSDataDetector具有大量的启发式功能,可以在普通用户的文本内容中更好地进行日期检测。它不适合解析非自然语言的日期。使用NSDateFormatter。