gpt4 book ai didi

cocoa - 六月的日期格式化程序返回 nil

转载 作者:行者123 更新时间:2023-12-03 16:05:13 24 4
gpt4 key购买 nike

我对这些代码行有一个奇怪的问题:

NSDateFormatter * df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"MMyyyy"];
NSDate * date = [df dateFromString:@"062008"];
NSLog(@"Date %@", date);

结果是:

 Date (null)

但是当我像这样更改月份时:

NSDateFormatter * df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"MMyyyy"];
NSDate * date = [df dateFromString:@"072008"];
NSLog(@"Date %@", date);

结果是:

Date 2008-06-30 23:00:00 +0000

仅对于六月(06),字符串的日期转换失败!

我认为,这与时区有关,任何想法。

谢谢

已解决:

[df setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];

正如我所想,这与时区有关。

最佳答案

恭喜,您发现了更多时区怪异现象!您是对的,更改时区可以解决问题。让我们去探索一下,看看能否找出原因!

首先,我们将尝试找到发生这种奇怪现象的每个时区:

NSArray *tzs = [NSTimeZone knownTimeZoneNames];
NSDateFormatter *f = [[NSDateFormatter alloc] init];
f.dateFormat = @"MMyyyy";
for (NSString *name in tzs) {
f.timeZone = [NSTimeZone timeZoneWithName:name];
NSDate *date = [f dateFromString:@"062008"];
if (date == nil) {
NSLog(@"%@", name);
}
}

这将循环遍历所有已知时区并尝试解析该时区中的“062008”。如果我们运行它,我们会发现它记录:

Africa/Casablanca
Asia/Karachi

所以我猜测您居住在卡萨布兰卡或卡拉奇(因为默认情况下,您的 NSDateFormatter 是使用您的时区初始化的,这就是您看到的原因这个问题;可能是卡萨布兰卡,因为您似乎比 GMT 早 1 小时)。

让我们看看是否可以找出这些时区的奇怪之处:<​​/p>

$ zdump -v Africa/Casablanca
... snip ...
Africa/Casablanca Sun Jun 1 00:00:00 2008 UTC = Sun Jun 1 01:00:00 2008 WEST isdst=1
... snip ...

$ zdump -v Asia/Karachi
... snip ...
Asia/Karachi Sat May 31 19:00:00 2008 UTC = Sun Jun 1 01:00:00 2008 PKST isdst=1
... snip ...

果然,卡萨布兰卡和卡拉奇似乎都跳过了 2008 年 6 月 1 日的午夜。因此,您实际上给了它一个无法解析的日期,而它返回了 nil。简而言之。

在这种情况下,正确的答案是更改您的时区(GMT 可能是一个不错的选择),因为您正在解析的这个字符串很可能不是来自用户输入(鉴于其奇怪的格式),因此应根据标准时区进行解析。虽然我确信卡萨布兰卡和卡拉奇确实是很棒的地方,但它们的时区并不完全是共同的......

TL;博士:

应该废除夏令时。

关于cocoa - 六月的日期格式化程序返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18663407/

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