首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSDate - iPhone上的格林尼治时间

问NSDate - iPhone上的格林尼治时间
EN

Stack Overflow用户
提问于 2010-04-06 06:55:40
回答 1查看 3.2K关注 0票数 3

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

代码语言:javascript
复制
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?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-04-06 08:08:56

NSDate使用与绝对值的偏移量来表示时间间隔。基准是GMT,所有时间间隔都是GMT,这就是为什么你会看到区别。如果您想要日期的字符串表示形式(比如存储在数据库中或其他什么地方),可以使用NSDateFormatter在您需要的任何特定时区中创建它。

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

代码语言:javascript
复制
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为基础。当您向用户显示日期格式化程序和日历对象时,或者如果您需要进行日历计算(例如,显示订阅明天到期的警告),请使用日期格式化程序和日历对象将它们转换为更有意义的内容。

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2581669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档