一个经常被忽视的问题是ISO 8601格式的字符串可能有毫秒而不是 .

换句话说,“2016-12-31T23:59:59.9999999”和“2016-12-01T00:00:00”都是合法的,但如果您使用的是静态类型的日期格式化程序,则其中一个将不会被解析 .

从 iOS 10 开始,您应该使用 ISO8601DateFormatter 来处理ISO 8601日期字符串的所有变体 . 见下面的例子:

let date = Date()

var string: String

let formatter = ISO8601DateFormatter()

string = formatter.string(from: date)

let GMT = TimeZone(abbreviation: "GMT")

let options: ISO8601DateFormatOptions = [.withInternetDateTime, .withDashSeparatorInDate, .withColonSeparatorInTime, .withTimeZone]

string = ISO8601DateFormatter.string(from: date, timeZone: GMT, formatOptions: options)

对于 iOS 9 and below ,请使用以下方法和多个数据格式化程序 .

我还没有找到一个涵盖这两个案例的答案,并且摘要了这个微妙的差异 . 以下是解决它的解决方案:

extension DateFormatter {

static let iso8601DateFormatter: DateFormatter = {

let enUSPOSIXLocale = Locale(identifier: "en_US_POSIX")

let iso8601DateFormatter = DateFormatter()

iso8601DateFormatter.locale = enUSPOSIXLocale

iso8601DateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"

iso8601DateFormatter.timeZone = TimeZone(secondsFromGMT: 0)

return iso8601DateFormatter

}()

static let iso8601WithoutMillisecondsDateFormatter: DateFormatter = {

let enUSPOSIXLocale = Locale(identifier: "en_US_POSIX")

let iso8601DateFormatter = DateFormatter()

iso8601DateFormatter.locale = enUSPOSIXLocale

iso8601DateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss'Z'"

iso8601DateFormatter.timeZone = TimeZone(secondsFromGMT: 0)

return iso8601DateFormatter

}()

static func date(fromISO8601String string: String) -> Date? {

if let dateWithMilliseconds = iso8601DateFormatter.date(from: string) {

return dateWithMilliseconds

}

if let dateWithoutMilliseconds = iso8601WithoutMillisecondsDateFormatter.date(from: string) {

return dateWithoutMilliseconds

}

return nil

}

}

Usage:

let dateToString = "2016-12-31T23:59:59.9999999"

let dateTo = DateFormatter.date(fromISO8601String: dateToString)

// dateTo: 2016-12-31 23:59:59 +0000

let dateFromString = "2016-12-01T00:00:00"

let dateFrom = DateFormatter.date(fromISO8601String: dateFromString)

// dateFrom: 2016-12-01 00:00:00 +0000

我还建议检查Apple article关于日期格式化程序 .

java iso 8601_如何在iOS上获得ISO 8601日期?相关推荐

  1. qq群 voiceover_如何在iOS上使用VoiceOver为所有人构建应用程序

    qq群 voiceover by Jayven N 由Jayven N 如何在iOS上使用VoiceOver为所有人构建应用程序 (How to build apps for everyone usi ...

  2. 如何在iOS上运行React Native应用

    by Soujanya PS 通过Soujanya PS 如何在iOS上运行React Native应用 (How to run a React Native app on iOS) I recent ...

  3. web dialog 内嵌 图片_Unity游戏如何在iOS上调用Facebook原生对话框分享图片

    原文发表于Unity中国论坛 ,如果对你有帮助请关注我! Unity游戏如何在iOS上调用Facebook原生对话框分享图片 - Unity​unity.cn 手头上的一个游戏项目需要实现截屏并分享到 ...

  4. 如何在Mac上。ISO映像文件刻录到DVD

    ISO是普通的CD或DVD光盘映像格式基于ISO-9660标准.从原始光盘ISO映像文件包含一个精确复制的数据.它包括光盘上的文件系统的信息,如目录结构,文件属性和引导代码,以及保存的数据.如果你想知 ...

  5. java安装_如何在 Mac 上安装 Java | Linux 中国

    macOS 用户可以运行 Java 的开源版本,以及用于云原生开发的新框架. 来源:https://linux.cn/article-12393-1.html 作者:Daniel Oh 译者:MCGA ...

  6. 移动应用ios和网页应用_如何在iOS上一次移动多个应用

    移动应用ios和网页应用 Apple doesn't really believe in detailed instruction manuals, so some handy tricks slip ...

  7. fftw java_如何在iOS上编译fftw3

    现在我只想在iOS上使用FFTW3,因为我已成功将其编译成iOS模拟器使用的i386版本,其余的工作是将它们编译成armv6(或v7)版本并将这两个版本组合在一起,下面是我的错误配置: ./confi ...

  8. 如何在iOS上创建矢量图形 画云 和 拼图块

    https://github.com/ssyyjj88/PaintCode_Syj http://www.cocoachina.com/ios/20160330/15826.html 原文:How T ...

  9. 如何在IOS上发布APP

    首先需要一个已经开发完成的App应用. 企业相关文字信息(英文):包括名称.注册地址.固定电话.网址.统一社会信用代码.营业执照扫描件等. 一张开通visa或者master功能的信用卡,公司邮箱,公司 ...

最新文章

  1. CSS基础篇--CSS/CSS3中的原生变量var详解
  2. wxPython的简单应用
  3. SEO -- 搜索引擎优化
  4. 调用webservice 设置超时时间
  5. java面试和笔试大全
  6. httpclient 多附件上传
  7. 安装quartus时弹出错误_Win10 安装arcgis10.2 for desktop需要.net framework 解决方案
  8. (42)Xilinx FIFO IP核配置(三)(第9天)
  9. java aes文件加密_JAVA AES文件加解密
  10. Northwind数据库下载地址
  11. 无根树的计数——prufer序列
  12. 网线水晶头两种标准的接法
  13. 业务数据分析最佳案例!旅游业数据分析!⛵
  14. OpenGL 亮度调节
  15. 蓝牙耳机按键事件linux,【记录】Android监听蓝牙耳机的按键事件
  16. 最有用的p d f 格式转换软件
  17. python3 yield
  18. STM32 HAL库学习系列第13篇---串口重定向配置--printf
  19. vscode 最详细的调试
  20. 8psk带宽计算_8PSK 系统的信息传输速率为 1500bit/s ,其无码间干扰传输的最小带宽为 ______ 。_学小易找答案...

热门文章

  1. AV1硬件采用及未来发展
  2. 备案被骗——骗子QQ487845970
  3. 如何成为有效学习的高手?
  4. 团圆季,来钛空舱一起赏花灯丨钛空舱赏灯系列
  5. 全国DAMA-CDGA/CDGP数据治理认证怎么样?
  6. lucene 3.02源代码统计
  7. 计算机一级考试模拟题
  8. 从零开始的nrf52832蓝牙开发(1)--蓝牙协议基础
  9. “近视眼”的人到底有多痛苦?(漫画)
  10. GD32F405RGT6ADC外部触发DMA(固件库)