【问题标题】:Getting NSDate from time string with UTC format从 UTC 格式的时间字符串中获取 NSDate
【发布时间】:2016-07-29 09:38:17
【问题描述】:

我正在尝试从 UTC 时间字符串中获取 NSDate 对象。时间字符串的例子是这样的:

2016-07-29T11:43:55+02:00

我正在使用NSDateFormatter 并将格式设置为:yyyy-MM-dd'T'HH:mm:ss

但是,这让我知道时区不正确。所以上面的日期是:2016-07-29T09:43:55+00:00

如何同时保持时区方面?

我确实尝试在格式化程序的末尾添加'Z',但这只会返回一个零日期。

【问题讨论】:

  • 没错。 9 比当地时间晚两小时。
  • 您的日期格式正确且日期字符串解析正确,所以您是在问如何检测传入日期字符串的 GMT 偏移量?

标签: objective-c nsdate nsdateformatter


【解决方案1】:

试试这个

 NSDateFormatter *userFormatter = [[NSDateFormatter alloc] init];
 [userFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZ"];
 NSLocale *posix = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
 [userFormatter setLocale:posix];
 NSString *dateConverted = [userFormatter stringFromDate:theDate];

【讨论】:

  • 那行不通(格式化程序中缺少'T')并且它不能回答问题。
【解决方案2】:

感谢所有的帮助。解决了这个问题。我的 iOS 模拟器上的时间是正确的。然而,当我打电话给[NSDate date]; 时,它向我显示了比当地时间早两小时的时间。因此,我在 NSDate 的格式中看到了“错误”。

【讨论】:

  • 告诉你在哪里? NSLog() 有机会吗?
  • 是的,NSLog。 iOS 模拟器显示正确时间但 NSLog 不显示的原因是什么?
  • 说真的;这可能是 stackoverflow 上被问得最多的一个问题,我看不出 iOS/OSX 开发人员不知道它的任何原因。 NSLog() 调用 [NSDate description]description 以 UTC 时区格式化日期。要在不同的时区显示日期,请设置 NSDateFormatter(包括时区)并使用它来进行日期 -> 字符串转换。
  • 感谢@Droppy的解释
【解决方案3】:

如果面向 iOS 10 及更高版本,请使用 NSISO8601DateFormatterhttps://developer.apple.com/documentation/foundation/nsiso8601dateformatter

【讨论】:

    猜你喜欢
    • 2017-02-03
    • 2010-11-18
    • 2021-03-12
    • 1970-01-01
    • 1970-01-01
    • 2014-09-15
    • 2018-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多