gpt4 book ai didi

ios - 在 SQLite 中存储 NSDate 在 GMT 中检索和显示显示,需要在创建时显示原始时区的时间

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:14:31 30 4
gpt4 key购买 nike

当用户创建新记录时,我将 NSDate 存储在具有本地时区(例如 PST)的 SQLite 中。当从数据库中检索到相同的 NSDate 时,时间被视为 GMT(这是可以理解的,因为 NSDate 没有时区的概念并且是绝对的)。

我想根据创建时区的时间显示 NSDate - 例如,如果 NSDate 存储在 PST 时区和之后,用户搬到美国东北部,我仍然希望能够从数据库中检索 NSDate 并以 PST(而不是 EDT)显示时间。我是否应该在创建记录时存储本地时区,以便在显示时间时使用该时区?

这是我的代码,如有任何帮助,我们将不胜感激。

NSDate *date = xxxxxxxxxxx; // This is retrieved from DB
NSDateFormatter *format = [[NSDateFormatter alloc] init];
format.dateFormat = @"MM/dd/yyyy hh:mm:ss";
NSString *timeStr = [format stringFromDate:date];
NSLog(@"Time :%@",timeStr);

最佳答案

你说:

Should I store the local time zone when the record is created, so that that timezone is used in displaying the time?

是的,这是一种方法:将时区信息保存在数据库的单独字段中。所以,在保存日期的时候,除了在数据库中写入GMT日期外,在一个单独的字段中,保存当前时区的名称:

NSString *timeZoneName = [NSCalendar currentCalendar].timeZone.name;

(注意,我没有使用缩写,因为它们不是唯一的。)

然后,从数据库中检索日期和时区名称后,使用 NSDateFormatter 以正确的格式输出日期:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.timeZone = [NSTimeZone timeZoneWithName:timeZoneName];
formatter.dateFormat = @"MM/dd/yyyy hh:mm:ss a z";
NSString *timeString = [formatter stringFromDate:date];

顺便说一下,请注意我在我的格式字符串中使用了 a(上午/下午)指示符(因为您没有使用 HH 表示小时)。

坦率地说,如果您想对国际用户友好,我会避免使用 dateFormat 并改用 dateStyletimeStyle:

formatter.dateStyle = NSDateFormatterShortStyle;
formatter.timeStyle = NSDateFormatterLongStyle;

关于ios - 在 SQLite 中存储 NSDate 在 GMT 中检索和显示显示,需要在创建时显示原始时区的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31150606/

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