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日期转换为本地时间以获取本地通知的主要内容,如果未能解决你的问题,请参考以下文章

将 UTC 日期格式转换为本地 nsdate

将UTC日期格式转换为本地nsdate

在 iOS 中将 UTC 日期时间转换为本地日期时间

iOS日期转换之UTC/GMT时间格式

将UTC时间转换为PST以获得夏令时?

将 UTC 日期时间字符串转换为本地日期时间