gpt4 book ai didi

iOS NSDataDetector 将上午时间换成下午时间(两者都应该是 24 小时)

转载 作者:行者123 更新时间:2023-11-29 10:43:10 24 4
gpt4 key购买 nike

我正在使用 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);

最佳答案

因为时区不同。 NSDataDetector 使用 GTM ,但您的系统时区不是(我猜……)。

我有一个像你一样的测试,它的输出是这样的: enter image description here

因此,您可以使用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);

输出是正确的: enter image description here

关于iOS NSDataDetector 将上午时间换成下午时间(两者都应该是 24 小时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23469851/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com