gpt4 book ai didi

iphone - NSDate - iPhone 上的 GMT

转载 作者:行者123 更新时间:2023-12-03 19:38:01 24 4
gpt4 key购买 nike

我在生产应用程序中有以下代码,它根据用户输入的日期计算 GMT 日期:

NSDate *localDate = pickedDate;
NSTimeInterval timeZoneOffset = [[NSTimeZone defaultTimeZone] secondsFromGMT]; // You could also use the systemTimeZone method
NSTimeInterval gmtTimeInterval = [localDate timeIntervalSinceReferenceDate] - timeZoneOffset;
NSDate *gmtDate = [NSDate dateWithTimeIntervalSinceReferenceDate:gmtTimeInterval];

该代码运行良好,直到上周英国实行了可怕的夏令时。

如何将日期转换为 GMT,同时考虑夏令时?

最佳答案

NSDate 使用绝对值的偏移量来表示时间间隔。基础是 GMT,所有时间间隔都是 GMT,这就是您看到差异的原因。如果您想要日期的字符串表示形式(例如存储在数据库或其他内容中),请使用 NSDateFormatter 在您需要的任何特定时区中创建它。

因此,这将始终为您提供 GMT 日期的字符串表示形式(例如存储在 mysql 中)(考虑了夏令时):

NSDateFormatter* formatter = [[[NSDateFormatter alloc] init] autorelease];
[formatter setDateFormat:@"YYYY-MM-dd HH:mm:ss"]; // e.g., set for mysql date strings
[formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
NSString* mysqlGMTString = [formatter stringFromDate:[NSDate date]];

无论本地时区如何,这都会为您提供 GMT 时间的正确日期字符串。另外,请记住,您使用 NSDate 和时间间隔进行的所有相对测量都以 GMT 为基础。当您将日期格式化程序和日历对象呈现给用户或需要进行日历计算时(例如,显示您的订阅明天到期的警告),请使用日期格式化程序和日历对象将它们转换为更有意义的内容。

编辑:我忘记添加时区!如果没有它,格式化程序将使用系统时区。

关于iphone - NSDate - iPhone 上的 GMT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2581669/

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