簡體   English   中英

如何從日期中以“ yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ”格式獲取日期字符串?

[英]How can i get date string from Date in “yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ” format?

我需要返回的日期字符串的格式與我檢索的日期字符串相同,但是在轉換為日期並返回之后,它丟失了幾個字符

var dateStr = "2019-08-02T11:46:46.5117312Z"

let formatter = DateFormatter()
formatter.calendar = Calendar(identifier: .iso8601)
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.timeZone = TimeZone(secondsFromGMT: 0)
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ"

let date = formatter.date(from: dateStr)

 var str = formatter.string(from: date!) // ===>>> "2019-08-02T11:46:46.511Z"

您可以使用自定義格式化程序來實現。 但是請注意,沒有足夠的Double精度來存儲日期。 結果是2019-08-02T11:46:46.511731 1 Z.代碼:

class CustomDateFormatter {
    private let dateFormatter: DateFormatter = {
        let formatter = DateFormatter()
        formatter.calendar = Calendar(identifier: .iso8601)
        formatter.locale = Locale(identifier: "en_US_POSIX")
        formatter.timeZone = TimeZone(secondsFromGMT: 0)
        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
        return formatter
    }()

    func date(fromString str: String) -> Date? {
        let strs = str.components(separatedBy: CharacterSet(charactersIn: ".Z"))
        if strs.count != 3 {
            return nil
        }

        let dateStr = strs[0]
        let secondsStr = strs[1]
        guard let date = dateFormatter.date(from: dateStr),
            let seconds = Double("0."+secondsStr) else {
            return nil
        }

        let timeinteval = date.timeIntervalSince1970 + seconds
        return Date(timeIntervalSince1970: timeinteval)
    }

    func string(fromDate date: Date) -> String {
        let clippedDate = Date(timeIntervalSince1970: floor(date.timeIntervalSince1970))
        let seconds = date.timeIntervalSince1970.truncatingRemainder(dividingBy: 1)
        var lastPart = String(format: "%.7f", seconds)
        lastPart = (lastPart as NSString).substring(from: 1)
        return "\(dateFormatter.string(from: clippedDate))\(lastPart)Z"
    }
}

let dateStr = "2019-08-02T11:46:46.5117312Z"
let formatter = CustomDateFormatter()
let date = formatter.date(fromString: dateStr)!

print(formatter.string(fromDate: date)) // =====>> 2019-08-02T11:46:46.5117311Z

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM