【问题标题】:NSDateFormatter Returns Nil with Seemingly Correct Format StringNSDateFormatter 以看似正确的格式字符串返回 Nil
【发布时间】:2016-01-18 18:59:53
【问题描述】:

我正在使用 NSDateFormatter 从服务器时间字符串生成 NSDate 对象。我们使用的是 ISO-8601 Extended,下面是我拥有的一种方法,它返回处理转换的日期格式化程序:

+ (NSDateFormatter *) dateFormatter {
    NSDateFormatter * dateFormatter = [NSDateFormatter new];
    dateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSSZ";
    dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier: @"en_US_POSIX"];
    return dateFormatter;
}

但是,当我使用该代码时,以下断言失败:

NSDateFormatter * dateFormatter = [MyClass dateFormatter]; 
                                            //    "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
_testDateObject = [dateFormatter dateFromString: @"2016-01-18'T'16:31:16.401Z"];
NSParameterAssert(_testDateObject);

我使用的日期格式字符串有什么问题?我已经尝试过它的变体(例如转义文字),但它们都没有产生有效的NSDate

编辑 我的原始帖子包含我使用的不正确的格式字符串。正如 rmaddy 所指出的,我应该使用yyyy-MM-dd'T'HH:mm:ss.SSSZ,我就是这样。

【问题讨论】:

  • 阅读日期格式说明符的文档。阅读您应该在年、日和小数秒中使用的内容..
  • 规范 unicode.org/reports/tr35/… DD 是一年中的某一天 (1..356)。 YYYY 不是日历年。 sss 是秒。 SSS 是小数秒。
  • 让我困惑的是那里的答案并没有回答这个问题。即使日期字符串为 yyyy-MM-dd'T'HH:mm:ss.SSSZ 或 yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ,我仍然得到 nil 结果

标签: ios objective-c nsdateformatter


【解决方案1】:

您的问题是您的输入字符串 "2016-01-18'T'16:31:16.401Z" 与您的格式不匹配。

在格式字符串中,' 字符开始和结束转义的字符序列。格式子字符串 'T' 匹配输入子字符串 T 匹配输入子字符串 'T'。由于格式字符串中没有任何内容与输入中的单引号匹配,因此转换失败。

如果你真的希望你的输入包含单引号,你必须在你的格式中使用双引号来匹配它们,并且使用单引号来转义T

let formatter = NSDateFormatter()
formatter.dateFormat = "yyyy-MM-dd'''T'''HH:mm:ss.SSSZ"
formatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")

let date = formatter.dateFromString("2016-01-18'T'16:31:16.401Z")

// Result:
"Jan 18, 2016, 10:31 AM"

【讨论】:

  • 当我尝试了你的建议时,效果很好!鉴于我无法更改来自服务器的字符串的格式,您对解析日期有什么建议?我尝试使用“yyyy-MM-dd''T''HH:mm:ss.SSSZ”(注意 T 周围的两个单引号),但这并没有解决问题。
  • 谢谢 Rob,解决了我的问题!我很好奇为什么我需要一个额外的对来逃避序列而不是两个。这是因为解析器需要一组额外的引号来知道它应该转义第二对引号吗?
  • 格式中的 '' 与输入中的 ' 匹配。格式中的 'T' 与输入中的 T 匹配。您不能在两种模式之间共享'。每个模式都必须是独立的。
猜你喜欢
  • 1970-01-01
  • 2017-04-05
  • 1970-01-01
  • 2016-02-23
  • 2014-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多