gpt4 book ai didi

ios - 在 sqlite 数据库中以 'GMT' 时区保存日期

转载 作者:行者123 更新时间:2023-11-28 21:41:56 24 4
gpt4 key购买 nike

我正在使用 Core-Data 来存储日期时间对象。

例如。 2015-07-28T07:16:52+0000 这是 GMT 时区的 ISO 格式的日期。

但是当我将这个日期保存在数据库中时

 NSString* dateString=@"2015-07-28T07:16:52+0000";
NSDateFormatter* dateTimeformatter=[[NSDateFormatter alloc] init];
[dateTimeformatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"];
[dateTimeformatter dateFromString:dateString];

我在数据库中看到的结果日期是 2015-07-28 12:46:52

根据我设备的时区,它位于 IST

我也尝试在 dateFormatter 中设置时区,但同样的响应

 NSString* dateString=@"2015-07-28T07:16:52+0000";
NSDateFormatter* dateTimeformatter=[[NSDateFormatter alloc] init];
[dateTimeformatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"];
[dateTimeformatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
[dateTimeformatter dateFromString:dateString];

即使我将 [NSDate date] 直接保存在数据库中,它也会根据设备的时区保存转换后的日期。

为什么 Core-data 没有考虑 NSDateFormatter 的时区?谁能告诉我如何在数据库中以 GMT 格式保存日期,而不管我设备的时区如何?

最佳答案

我认为您看到的行为是第 3 方软件将其转换为您的时区以供显示。除了显示目的(或者如果您需要在它们之间进行转换以进行计算,也许),时区并不重要。而且,NSDate 本身并不真正对应于任何特定时区,尽管在内部它们被表示为 GMT。 The doc说:

The sole primitive method of NSDate, timeIntervalSinceReferenceDate, provides the basis for all the other methods in the NSDate interface. This method returns a time value relative to an absolute reference date—the first instant of 1 January 2001, GMT.

如果您查看该值的实际存储方式(可以使用 sqlite3 命令行工具),您可以看到 Core Data 将其存储为自 1/1/01 以来的秒数;不涉及时区。我有 an app它进行了大量的日期操作并将日期存储在核心数据存储中。它看起来像:

zach$ sqlite3 TaskLog.sqlite
sqlite> select ZSTARTTIME from ZTASK;
459924925.598104
459925327.3355
459925356.467429
...

关于ios - 在 sqlite 数据库中以 'GMT' 时区保存日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31697771/

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