【问题标题】:What types of dates are these?这些日期是什么类型的?
【发布时间】:2013-04-16 20:34:04
【问题描述】:

我有一个具有这种格式日期的 plist:

Mar 11, 2013 10:16:31 AM

在我的控制台中显示为

2013-03-11 16:16:31 +0000

而 Web 服务正在返回控制台中的内容,如下所示:

2013-03-01T18:21:45.231Z

如何将我的 plist 日期修复为与 Web 服务相同的格式?

【问题讨论】:

  • 第一个(哎呀,第二个)表单是打印带有%@ 格式的 NSDate 时得到的。第二个(哎呀,第三个)是一个字符串。如果您愿意,可以使用 NSDateFormatter 格式化 NSDate 以匹配您的其他样式。

标签: ios date format


【解决方案1】:

关于您的三种日期格式:

  1. 当您在 Xcode 的 plist 中查看 NSDate 时,第一个只是日期格式,这是当前语言环境中人类可读的日期(但如果您在文本编辑器中查看 plist,您会看到它实际上是用@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'" 格式编写的)。

  2. 第二个是来自description 方法的默认格式a NSDate(例如你NSLog a NSDate)。

  3. 第三种是RFC 3339/ISO 8601 格式(以秒为单位),常用于Web服务。

请参阅 Apple 的 Technical Q&A QA1480

顺便说一句,该技术说明不包括毫秒,因此您可能希望使用 @"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'SSS'Z'" 之类的内容,例如:

NSDate *date = [NSDate date];
NSLocale *enUSPOSIXLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.locale = enUSPOSIXLocale;
formatter.dateFormat = @"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'SSS'Z'";
formatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
NSString *dateString = [formatter stringFromDate:date];
NSLog(@"%@", dateString);

如果您想将日期作为 RFC 3339/ISO 8601 格式的字符串存储在 plist 中(或者,如果您需要将 NSDate 转换为字符串以传输到您的 Web 服务),您可以使用它.如上所述,默认的 plist 格式不会为 NSDate 对象保留几分之一秒,因此如果这很关键,将日期存储为上述代码生成的字符串可能会很有用。

此日期格式化程序可用于将日期转换为字符串(使用stringFromDate),以及将正确格式化的字符串转换为NSDate 对象(使用dateFromString)。

【讨论】:

  • 请注意,当使用二进制格式 (NSPropertyListXMLFormat_v1_0) 写入时,日期会保留其小数部分。
猜你喜欢
  • 2016-04-28
  • 1970-01-01
  • 2021-09-22
  • 2013-04-23
  • 1970-01-01
  • 2014-03-21
  • 1970-01-01
  • 1970-01-01
  • 2014-08-10
相关资源
最近更新 更多