iPhone 上的绝对 GMT 日期

Posted

技术标签:

【中文标题】iPhone 上的绝对 GMT 日期【英文标题】:Absolute GMT date on iPhone 【发布时间】:2011-04-11 22:33:33 【问题描述】:

我正在尝试获取一个代表格林威治标准时间中午的日期,以便定期发出本地通知。

我需要这个本地通知在使用该应用程序的任何人的确切时间触发。

到目前为止,我正在尝试这个:

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *dateComps = [[NSDateComponents alloc] init];
[dateComps setHour:12];
[dateComps setMinute:0];
[dateComps setMonth:1];
[dateComps setDay:1];
[dateComps setYear:2010];

NSDate *localDate = [calendar dateFromComponents:dateComps];
NSTimeInterval timeZoneOffset = [[NSTimeZone defaultTimeZone] secondsFromGMT];
NSTimeInterval gmtTimeInterval = [localDate timeIntervalSinceReferenceDate] - timeZoneOffset;
NSDate *gmtDate = [NSDate dateWithTimeIntervalSinceReferenceDate:gmtTimeInterval];

localNotification.fireDate = gmtDate;

但是,这不起作用。有什么建议吗?

编辑:: 如果我没有在通知中指定时区,这是否可行:

localNotification.fireDate = [NSDate dateWithTimeIntervalSince1970:1284483600];

【问题讨论】:

【参考方案1】:

将日历的时区设置为 GMT 有效吗?

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *dateComps = [[NSDateComponents alloc] init];
[dateComps setHour:12];
[dateComps setMinute:0];
[dateComps setMonth:1];
[dateComps setDay:1];
[dateComps setYear:2010]; 

[calendar setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

NSDate *gmtDate = [calendar dateFromComponents:dateComps];

【讨论】:

这是否类似于我上面的编辑,您只需创建一个日期,其中代表这个时间的纪元秒数?该死,谁能想到这个约会的东西会如此棘手? 是的,我认为您的编辑也可以。每个人都会从 1970 年格林威治标准时间得到相同的偏移量,所以每个人都会同时开火。两者都应该工作(我想......!)

以上是关于iPhone 上的绝对 GMT 日期的主要内容,如果未能解决你的问题,请参考以下文章

在iphone中转换日期时间[关闭]

如何通过绝对路径从 iPhone 上的视频文件中读取流

NSDate - 将日期转换为 GMT

iPhone和Cocoa上的日期格式

我的 NSDateFormatter 仅适用于 iPhone 模拟器

iphone4s上的日历为啥到2038年就没了?为啥日期最多只能改到2038年1月1日?