প্রায়শই অবহেলিত সমস্যাটি হ'ল আইএসও 8601 ফর্ম্যাটে স্ট্রিংগুলিতে মিলিসেকেন্ড থাকতে পারে এবং নাও থাকতে পারে।
অন্য কথায়, "2016-12-31T23: 59: 59.9999999" এবং "2016-12-01T00: 00: 00" উভয়ই বৈধ, তবে আপনি যদি স্ট্যাটিক-টাইপড তারিখ বিন্যাস ব্যবহার করেন তবে তার একটিও বিশ্লেষণ করা যাবে না ।
আইওএস 10 থেকে শুরু করে আপনার এমন ব্যবহার করা উচিত ISO8601DateFormatter
যা আইএসও 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 এর এবং নীচের ব্যবহার একাধিক ডেটা formatters সাথে নিম্নলিখিত পদ্ধতির।
আমি এমন কোনও উত্তর খুঁজে পাইনি যা এই উভয় কেসকেই কভার করে এবং এই সূক্ষ্ম পার্থক্যটিকে দূরে সরিয়ে দেয়। সমাধান যে এখানে এটি সমাধান:
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
}
}
ব্যবহার:
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
আমি তারিখের ফর্ম্যাটরগুলি সম্পর্কে অ্যাপল নিবন্ধটি চেক করার পরামর্শ দিই ।