【问题标题】:Conversion: NSString to NSDate转换:NSString 到 NSDate
【发布时间】:2015-11-06 20:39:33
【问题描述】:

这是一个非常常见的问题,但我的问题可能是独一无二的,因为我的秒数有长小数位。

NSString *timestamp = @"2015-11-06 15:27:34.0000000";

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss zzz"];
NSDate *capturedStartDate = [dateFormatter dateFromString: timestamp];

我的capturedStartDate 为空。

对于日期格式,我尝试将zzz 替换为Za,然后将其完全删除。我也尝试过使用和不使用'T'。有人知道从字符串中检索此日期的正确格式吗?

【问题讨论】:

  • [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss.SSS"]; 我认为捕获更多小数点没有任何意义。下次,考虑阅读文档:unicode.org/reports/tr35/tr35-31/…
  • @matt 我没有从 iOS 应用程序中捕获这个日期,而是从数据库中接收它。这只是我必须处理的格式,因为这就是它的存储方式。我同意,毫秒可能毫无意义。
  • 我的意思是,超过小数点后三位,NSDate 不会区分。它没有那种精确度。因此,".SSS" 是您需要的所有 S。

标签: ios objective-c nsdate nsdateformatter


【解决方案1】:

您的日期字符串中没有时区,因此您应该删除该Z。此外,你也有几分之一秒。并且日期字符串中没有T。所以你想要

yyyy-MM-dd HH:mm:ss.SSSSSS

这确实引出了关于该字符串代表什么时区的问题。如果是 UTC,您需要相应地设置格式化程序的时区。

同样,您可能要小心使用非公历的用户。有关将 locale 设置为 en_US_POSIX 的信息,请参阅 Apple Technical Q&A 1480

【讨论】:

  • 就是这样,我也必须删除'T',如果我不删除它,那么日期将返回 null
  • 同意。 T 也应该被删除。
猜你喜欢
  • 2011-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-25
  • 2011-04-24
  • 2017-04-23
相关资源
最近更新 更多