gpt4 book ai didi

iOS NSDate 和 NSDateFormatter 行为

转载 作者:行者123 更新时间:2023-11-28 21:58:46 25 4
gpt4 key购买 nike

因此,我有一个格式为 YYMMDDHHMMSS 的字符串,并且我正在尝试(努力)从中获取正确的 NSDate 对象。

这是我的代码:

NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
[format setDateFormat:@"yyMMddHHmmss"];
NSDate *date = [format dateFromString:@"140904123421"];

NSLog(@"日期: %@", 日期);

我遇到了这样的怪事:

DATE: 2014-09-04 17:04:21 +0000

我检查过这个table我的格式化程序似乎是正确的,我也尝试删除语言环境,但我仍然得到错误的日期。那么,是否有可能回到正确的时间?

谢谢。

最佳答案

正如您问题的评论中所指出的,您的 NSDate 是正确的; NSDate 始终将其时间存储在 GMT 中。默认情况下,当 NSDateFormatter 解析您的日期时,它会将您的本地时区转换为 GMT,以便存储在生成的 NSDate 对象中的内容是一致的(它实际上比那更微妙,但你可以那样想)。由于您的时区是 GMT-04:30,这意味着它将为您的时间增加 4 小时 30 分钟,使 2014-09-04 12:34:21 GMT-4: 30 = 2014-09-04 17:04:21 GMT(正如@MartinR 指出的)。

根据您的评论,听起来您需要以 yyyy-MM-dd HH:mm:ss 格式将此日期存储在数据库中,本地时间 .最简单的方法是简单地使用第二个 NSDateFormatter:

NSDateFormatter *formatOut = [[NSDateFormatter alloc] init];
[formatOut setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSString *dateString = [formatOut stringFromDate: date];

由于 NSDateFormatter 将默认使用您本地的时区,因此应该将 dateGMT“转换”回 GMT- 4:30 并将 dateString 设置为 2014-09-04 12:32:21


综上所述,在本地时区存储日期几乎总是一个坏主意。时区是棘手的事情,所以最好始终以 GMT/UTC 存储日期并对其进行任何计算,然后仅在显示时将其转换为本地时间它给你的用户。如果您时区以外的人访问您的数据、您的时区规则发生变化(发生的频率比您想象的要频繁)、您需要将您的日期传递给某些外部服务/应用等,这将为您省去很多麻烦。

关于iOS NSDate 和 NSDateFormatter 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25671423/

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