iOS将NSDate的UTC日期转换为本地时间以获取本地通知
Posted
技术标签:
【中文标题】iOS将NSDate的UTC日期转换为本地时间以获取本地通知【英文标题】:iOS Convert UTC date of NSDate to Localtime fo local notifications 【发布时间】:2015-06-24 13:00:00 【问题描述】:我在将 NSDate date 转换为本地 DateTime 时遇到问题。我正在使用本地通知,并且我的 fireDate 属性正常,但日期中的 UTC 组件除外。
这是 NSDate 日期并将日期转换为我的本地时区
这是我在这里找到的转换代码Convert UTC NSDate to local Timezone Objective-C
NSDate *someDateInUTC = [NSDate date];
NSTimeInterval timeZoneSeconds = [[NSTimeZone localTimeZone] secondsFromGMT];
NSDate *dateInLocalTimezone = [someDateInUTC dateByAddingTimeInterval:timeZoneSeconds];
我在时间组件中增加了 5 秒,所以这是我的 fireDate:
我正在使用推送通知,当用户在应用程序的某个位置时,我想从我的推送通知中向他展示本地通知。这段代码在我的- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
方法中。我已经实现了本地通知的方法:
-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
UIApplicationState applicationState = application.applicationState;
if (applicationState == UIApplicationStateBackground)
[application presentLocalNotificationNow:notification];
我认为我的 dateInLocalTimezone 中的这个 UTC 组件给我带来了麻烦,但我不知道如何解决它。
【问题讨论】:
我不关注。你有什么“烦恼”?该日期/时间首先来自哪里? 通常你不需要对时区做任何事情,NSDate 总是在 0000 并且一切都应该正常工作。在你的情况下,我不需要弄乱时区 这个 UTC 最后给我带来了麻烦,我想在 5 秒后显示本地通知。我的 fireDate 需要有时间间隔 @Andrea 好的,我已经按照你的说法尝试过了,它转到了 didReceiveLocalNotification。但现在它只是没有显示为横幅。 所以你是说你在创建NSDate
来定义何时应该触发本地通知时遇到了麻烦?在这种情况下NSDate *date = [NSDate dateWithTimeIntervalSinceNow:numSeconds]
将起作用。
【参考方案1】:
好的,我读了你的问题。然后我有下面的例子给你。
在这里,我将本地时间转换为 UTC 时间。
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
fmt.dateFormat = @"LLL d, yyyy - HH:mm:ss zzz";
NSDate *utc = [fmt dateFromString:@"June 14, 2012 - 01:00:00 UTC"];
fmt.timeZone = [NSTimeZone systemTimeZone];
NSString *local = [fmt stringFromDate:utc];
NSLog(@"%@", local);
【讨论】:
以上是关于iOS将NSDate的UTC日期转换为本地时间以获取本地通知的主要内容,如果未能解决你的问题,请参考以下文章