在 Swift 中格式化日期和时间

Formatting a Date and Time in Swift

我从 API 获得了这个时间格式 2022-01-09T19:04:16。我想显示此字符串中的 可读 time 以及可能与给定时间和当前时间的差异。

我找不到合适的格式。有人可以帮忙吗?我尝试 substring 检索值如下,但是,这不是我想要的。

let str = "2022-01-09T19:04:16" print(str.suffix(8)) //prints 19:04:16

您可以将 String 转换为 Date 并处理您想用它执行的所有操作。

  1. 由于输入格式不是标准格式,我假设我们使用的是 UTC.
  2. 如果输入发生变化,该函数将抛出错误而不会破坏您的大部分代码。
enum DateFormattingErrors: Error {
    case invalidFormat
}

func formatDate(_ from: String) throws -> Date {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
    dateFormatter.timeZone = TimeZone(abbreviation: "UTC")

    guard let date = dateFormatter.date(from: from) else {
        throw DateFormattingErrors.invalidFormat
    }
    
    return date
}

func UTCFormattedDate(_ from: Date, withDate: Bool) -> String {
    let utcDateFormatter = DateFormatter()
    if withDate {
        utcDateFormatter.dateStyle = .medium
    }
    utcDateFormatter.timeStyle = .medium
    utcDateFormatter.timeZone = TimeZone(abbreviation: "UTC")
    return utcDateFormatter.string(from: from)
}

do {
    let date = try formatDate("2022-01-09T19:04:16")
    print(Date().description)
    print(date.timeIntervalSinceNow) //Time difference between given date and current date
    print(UTCFormattedDate(date, withDate: false)) // Better representation of date
} catch {
    print(error)
}

输出

2022-01-10 10:09:03 +0000  //CurrentDate
-54287.22359800339         //Time difference current and given
7:04:16 PM                 //Formatted date