在 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
并处理您想用它执行的所有操作。
- 由于输入格式不是标准格式,我假设我们使用的是 UTC.
- 如果输入发生变化,该函数将抛出错误而不会破坏您的大部分代码。
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
我从 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
并处理您想用它执行的所有操作。
- 由于输入格式不是标准格式,我假设我们使用的是 UTC.
- 如果输入发生变化,该函数将抛出错误而不会破坏您的大部分代码。
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