java iso 8601_如何在iOS上获得ISO 8601日期?
一个经常被忽视的问题是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日期?相关推荐
- qq群 voiceover_如何在iOS上使用VoiceOver为所有人构建应用程序
qq群 voiceover by Jayven N 由Jayven N 如何在iOS上使用VoiceOver为所有人构建应用程序 (How to build apps for everyone usi ...
- 如何在iOS上运行React Native应用
by Soujanya PS 通过Soujanya PS 如何在iOS上运行React Native应用 (How to run a React Native app on iOS) I recent ...
- web dialog 内嵌 图片_Unity游戏如何在iOS上调用Facebook原生对话框分享图片
原文发表于Unity中国论坛 ,如果对你有帮助请关注我! Unity游戏如何在iOS上调用Facebook原生对话框分享图片 - Unityunity.cn 手头上的一个游戏项目需要实现截屏并分享到 ...
- 如何在Mac上。ISO映像文件刻录到DVD
ISO是普通的CD或DVD光盘映像格式基于ISO-9660标准.从原始光盘ISO映像文件包含一个精确复制的数据.它包括光盘上的文件系统的信息,如目录结构,文件属性和引导代码,以及保存的数据.如果你想知 ...
- java安装_如何在 Mac 上安装 Java | Linux 中国
macOS 用户可以运行 Java 的开源版本,以及用于云原生开发的新框架. 来源:https://linux.cn/article-12393-1.html 作者:Daniel Oh 译者:MCGA ...
- 移动应用ios和网页应用_如何在iOS上一次移动多个应用
移动应用ios和网页应用 Apple doesn't really believe in detailed instruction manuals, so some handy tricks slip ...
- fftw java_如何在iOS上编译fftw3
现在我只想在iOS上使用FFTW3,因为我已成功将其编译成iOS模拟器使用的i386版本,其余的工作是将它们编译成armv6(或v7)版本并将这两个版本组合在一起,下面是我的错误配置: ./confi ...
- 如何在iOS上创建矢量图形 画云 和 拼图块
https://github.com/ssyyjj88/PaintCode_Syj http://www.cocoachina.com/ios/20160330/15826.html 原文:How T ...
- 如何在IOS上发布APP
首先需要一个已经开发完成的App应用. 企业相关文字信息(英文):包括名称.注册地址.固定电话.网址.统一社会信用代码.营业执照扫描件等. 一张开通visa或者master功能的信用卡,公司邮箱,公司 ...
最新文章
- CSS基础篇--CSS/CSS3中的原生变量var详解
- wxPython的简单应用
- SEO -- 搜索引擎优化
- 调用webservice 设置超时时间
- java面试和笔试大全
- httpclient 多附件上传
- 安装quartus时弹出错误_Win10 安装arcgis10.2 for desktop需要.net framework 解决方案
- (42)Xilinx FIFO IP核配置(三)(第9天)
- java aes文件加密_JAVA AES文件加解密
- Northwind数据库下载地址
- 无根树的计数——prufer序列
- 网线水晶头两种标准的接法
- 业务数据分析最佳案例!旅游业数据分析!⛵
- OpenGL 亮度调节
- 蓝牙耳机按键事件linux,【记录】Android监听蓝牙耳机的按键事件
- 最有用的p d f 格式转换软件
- python3 yield
- STM32 HAL库学习系列第13篇---串口重定向配置--printf
- vscode 最详细的调试
- 8psk带宽计算_8PSK 系统的信息传输速率为 1500bit/s ,其无码间干扰传输的最小带宽为 ______ 。_学小易找答案...