当前位置: 首页 > 面试题库 >

ISO8601DateFormatter不解析ISO日期字符串

楚嘉
2023-03-14
问题内容

我正在尝试解析

2017-01-23T10:12:31.484Z

使用ISO8601DateFormatter提供的本机类,iOS 10但总是失败。如果字符串不包含毫秒,Date则创建对象不会出现问题。

我已经尝试过很多options组合,但总是失败…

let formatter = ISO8601DateFormatter()
formatter.timeZone = TimeZone(secondsFromGMT: 0)
formatter.formatOptions = [.withInternetDateTime, .withDashSeparatorInDate, .withColonSeparatorInTime, .withColonSeparatorInTimeZone, .withFullTime]

任何想法?谢谢!


问题答案:

macOS 10.13之前的版本/ iOS 11 ISO8601DateFormatter不支持包括毫秒在内的日期字符串。

一种解决方法是使用正则表达式删除毫秒部分。

let isoDateString = "2017-01-23T10:12:31.484Z"
let trimmedIsoString = isoDateString.replacingOccurrences(of: "\\.\\d+", with: "", options: .regularExpression)
let formatter = ISO8601DateFormatter()
let date = formatter.date(from: trimmedIsoString)

在macOS 10.13 + / iOS 11+中,添加了新选项以支持小数秒:

static var withFractionalSeconds: ISO8601DateFormatter.Options { get }

let isoDateString = "2017-01-23T10:12:31.484Z"
let formatter = ISO8601DateFormatter()
formatter.formatOptions =  [.withInternetDateTime, .withFractionalSeconds]
let date = formatter.date(from: isoDateString)


 类似资料:
  • 问题内容: 需要有关将具有以下结构的ISO 8601日期转换为javascript的帮助/提示。 我想这样格式化日期: 我想保持此解决方案尽可能干净和最小。 问题答案: datejs可以解析以下内容,您可能想尝试一下。 编辑:正则 表达式版本 结果 Edit2: 我将时区更改为EST,现在我关注了 返回 基本上 返回 正则表达式部分只是将上述字符串转换为您所需的格式。

  • 我尝试在Go中解析日期字符串< code >“2014-09-12t 11:45:26.371 z”。该时间格式定义为: RFC-3339日期时间 ISO-8601日期时间 密码 我得到了这个错误: 解析时间“2014-11-12T11:47:39.489Z”:月超出范围 如何解析这个日期字符串?

  • 问题内容: 在Android应用程序中,我试图从字符串中解析日期,以发现两次之间的差异。 因此,我必须进行解析,以便获得格式,因此 但是我到了 所以我在做什么错了?如何在这里解析? 问题答案: 您需要将第二个MM(月)更改为mm(分钟):

  • 问题内容: 我的日期格式为“ yyyy-MM-dd’T’HH:mm:ss.sssZ”。例如,日期为“ 2018-07-17T09:59:51.312Z”。我正在使用下面的代码来解析Java中的String。 这给了我“无法解析的日期:”例外。谁能告诉我该怎么做? 问题答案: 您忘了在 那会做的工作

  • 问题内容: 我试图解析一个日期字符串,它是FTP服务器上文件的修改日期。以下是代码。 我在日志中得到这个 谁能帮我这个忙吗? 问题答案: String#substring(int index) 方法的javadoc 说: 子字符串以指定索引处的字符开头,并扩展到该字符串的末尾。 这就是您遇到的问题:您没有正确使用该方法,因为调用该方法时,您会收到另一个,该字符包含一个空格作为第一个字符,这就是解析

  • 这就是问题所在: 我有一些带有旅行信息的. csv文件,日期显示为字符串(每一行代表一次旅行): “1-5月和10-12月的所有星期一。6-9月的所有日子” 我必须将字符串解析为日期,并为每次旅行将其保存到一个数组中。 问题是我不知道怎么做。甚至我的大学老师也告诉我,他们不知道如何做到这一点:S。我无法使用http://docs.oracle.com/javase/6/docs/api/java/