2017-01-25 19 views
6

Tôi đang cố gắng để phân tích nàyISO8601DateFormatter không phân tích theo tiêu chuẩn ISO chuỗi ngày

2017-01-23T10: 12: 31.484Z

sử dụng có nguồn gốc ISO8601DateFormatter lớp được cung cấp bởi iOS 10 nhưng luôn thất bại . Nếu chuỗi không chứa mili giây, đối tượng Date được tạo mà không có sự cố.

Tôi đang cố gắng này và nhiều options kết hợp nhưng luôn thất bại ...

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

Bất kỳ ý tưởng? Cảm ơn!

+1

thấy điều này một lần http: // stackoverflow. com/questions/28016578/swift-how-to-tạo-a-date-time-tem-và-format-as-iso-8601-rfc-3339-utc-tim/28016619 –

+0

Vâng, tôi biết rằng sử dụng 'dateFormat 'là cách, nhưng tôi muốn sử dụng class native của iOS 10 ... :( – mhergon

Trả lời

12

ISO8601DateFormatter không hỗ trợ chuỗi ngày bao gồm mili giây.

Giải pháp thay thế là xóa phần mili giây bằng cụm từ thông dụng.

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) 

Edit: Trong hệ điều hành MacOS 10.13+/iOS 11 + là một lựa chọn mới được thêm vào để hỗ trợ giây phân đoạn:

static var withFractionalSeconds: ISO8601DateFormatter.Options { get }

+0

Khi nào được thêm vào? Tôi đã gửi một radar khoảng 3 tuần trước bởi vì nó không có vài giây. Dường như vẫn không cho phép chọn số vị trí thập phân: (http://openradar.appspot.com/radar?id=6095965782016000 – Fogmeister

+0

Nó được thêm vào với [macOS 10.13/iOS 11 SDK] (https: //developer.apple.com/documentation/foundation/iso8601dateformatter.options/2923300-withfractionalseconds) – vadian

+0

Không, nó thực sự không phải là điều đó đã không có cách đây 3 tuần trước đây. Phải được thêm rất gần đây. Nó có thể hỗ trợ trở lại 11.0 nhưng nó chỉ phải được thêm vào trong vài ngày qua, tôi thậm chí còn cho thấy một đồng nghiệp rằng nó không có ở đó chỉ trong tuần trước :) – Fogmeister

Các vấn đề liên quan