gpt4 book ai didi

objective-c - API 请求期间创建的 NSDates 显示奇怪的结果

转载 作者:行者123 更新时间:2023-11-29 04:27:57 25 4
gpt4 key购买 nike

我正在尝试使用 RestKit 将数据导入并映射到 CoreData。

这是来自 API 的数据。

active": false,
"date": "2012-09-09",
"desc": "",
"end": "18:30",
"location": "",
"simStatus": "Accepted",
"start": "17:00",
"title": "The title"

当我尝试将这些映射到核心数据时,时间和有时日期会发生变化。例如,存储在 Core Data 中的上述数据最终将是 start = 1970-1-1 23:00 和 end = 1970-1-1 00:30?

API 发送的时间是本地时间,API 知道应用程序的使用时间和地点。想想体育赛事,我们知道客场比赛的地点/时间。

我需要获取存储在 Core Data 中的这些时间和日期,即 API 移交它们的确切时间 hh:mm。不确定为什么 Core Data 或 Restkit 决定改变它们?我理解 1970 年部分是因为开始和结束没有日期,但为什么要更改时间?

有人知道解决办法吗?

下面是 RestKit 映射代码,我尝试过使用时区、无时区、本地时区、UTC 时区等...我也尝试过使用和不使用 en_US_POSIX。

NSDateFormatter* timeFormatter = [NSDateFormatter new];
[timeFormatter setDateFormat:@"HH:mm"];
timeFormatter.timeZone = [NSTimeZone localTimeZone];
timeFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];

NSDateFormatter* dateFormatter = [NSDateFormatter new];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
dateFormatter.timeZone = [NSTimeZone localTimeZone];
dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
gameMapping.dateFormatters = [NSArray arrayWithObjects:dateFormatter, timeFormatter, nil ];

[gameMapping mapKeyPath:@"start" toAttribute:@"start"];
[gameMapping mapKeyPath:@"end" toAttribute:@"end"];
.......

最佳答案

正如 Hot Licks 在他的评论中指出的那样,所有 NSDate 对象都是 UTC,因此这就是您打印这些对象时所看到的内容。由于您显式解析设备时区中的值,因此当您查看生成的 UTC 值时,您会看到变化。

通常情况下,我强烈建议以完整的日期和时间值形式发送内容,其中包括时区偏移量。 (例如,“2012-09-09T18:30:00-05:00”。)涉及的变量太多,不能不明确说明所有内容。或者至少将时区作为单独的(但仍然是明确的)值传递。

如果您对服务器端没有任何控制权(正如您所说的那样),那么您的解决方法是解析这些值就像它们是UTC,然后希望事情能够发生匹配——虽然有风险和脆弱——听起来可能是你最好的选择。

关于objective-c - API 请求期间创建的 NSDates 显示奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12079661/

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