如何在日期格式中添加 th 和 st
How to add th and st in Date Format
我想把日期转换成"Friday 17th, 7:00pm"这种格式。但我无法在日期后添加 "th" 和 "st"。我正在使用下面的代码来转换这样的日期格式。请告诉我。
我为这种格式做了什么?
func convertDateFormater(_ date: String) -> String
{
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"//this your string date format
dateFormatter.timeZone = NSTimeZone(name: "UTC") as TimeZone?
//dateFormatter.locale = Locale(identifier: "your_loc_id")
let convertedDate = dateFormatter.date(from: date)
guard dateFormatter.date(from: date) != nil else {
assert(false, "no date from string")
return ""
}
dateFormatter.dateFormat = "EEEE dd, h:mma"///this is what you want to convert format
dateFormatter.timeZone = NSTimeZone(name: "UTC") as TimeZone?
let timeStamp = dateFormatter.string(from: convertedDate!)
return timeStamp
}
只要不同的语言环境不发挥任何作用,你就可以这样做:
let date = Date()
let calendar = Calendar.current
let day = calendar.component(.day, from: date)
let daySuffix: String
switch day {
case 11...13: return "th"
default:
switch day % 10 {
case 1: return "st"
case 2: return "nd"
case 3: return "rd"
default: return "th"
}
}
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "EEEE dd'\(daySuffix)', h:mma"
dateFormatter.string(from: date)
此外,如果在静态辅助函数中使用它,请确保设置 daySuffix
而不是返回。我的用例非常相似,尽管我使用的是从 API 中提取的纪元时间,但我需要此函数作为字符串的扩展 class 是 iOS Swift 项目。我最终得到以下结果:
static func formatPrettyDate(_ startTime: Int) -> String {
let date = Date(timeIntervalSince1970: TimeInterval(startTime / 1000))
let calendar = Calendar.current
let day = calendar.component(.day, from: date)
let daySuffix: String
switch day {
case 11...13: daySuffix = "th"
default:
switch day % 10 {
case 1: daySuffix = "st"
case 2: daySuffix = "nd"
case 3: daySuffix = "rd"
default: daySuffix = "th"
}
}
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "EEEE, MMMM dd'\(daySuffix)'"
return dateFormatter.string(from: date)
}
这返回了类似这样的内容:Thursday, August 27th
我现在可以在任何 UI 字符串组件上使用它,这些组件需要有一个纪元的漂亮日期。
@AndréSlotta 给出了一个很好的答案,所以所有的功劳都归于他。我刚刚更改了我的用例。
我想把日期转换成"Friday 17th, 7:00pm"这种格式。但我无法在日期后添加 "th" 和 "st"。我正在使用下面的代码来转换这样的日期格式。请告诉我。 我为这种格式做了什么?
func convertDateFormater(_ date: String) -> String
{
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"//this your string date format
dateFormatter.timeZone = NSTimeZone(name: "UTC") as TimeZone?
//dateFormatter.locale = Locale(identifier: "your_loc_id")
let convertedDate = dateFormatter.date(from: date)
guard dateFormatter.date(from: date) != nil else {
assert(false, "no date from string")
return ""
}
dateFormatter.dateFormat = "EEEE dd, h:mma"///this is what you want to convert format
dateFormatter.timeZone = NSTimeZone(name: "UTC") as TimeZone?
let timeStamp = dateFormatter.string(from: convertedDate!)
return timeStamp
}
只要不同的语言环境不发挥任何作用,你就可以这样做:
let date = Date()
let calendar = Calendar.current
let day = calendar.component(.day, from: date)
let daySuffix: String
switch day {
case 11...13: return "th"
default:
switch day % 10 {
case 1: return "st"
case 2: return "nd"
case 3: return "rd"
default: return "th"
}
}
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "EEEE dd'\(daySuffix)', h:mma"
dateFormatter.string(from: date)
此外,如果在静态辅助函数中使用它,请确保设置 daySuffix
而不是返回。我的用例非常相似,尽管我使用的是从 API 中提取的纪元时间,但我需要此函数作为字符串的扩展 class 是 iOS Swift 项目。我最终得到以下结果:
static func formatPrettyDate(_ startTime: Int) -> String {
let date = Date(timeIntervalSince1970: TimeInterval(startTime / 1000))
let calendar = Calendar.current
let day = calendar.component(.day, from: date)
let daySuffix: String
switch day {
case 11...13: daySuffix = "th"
default:
switch day % 10 {
case 1: daySuffix = "st"
case 2: daySuffix = "nd"
case 3: daySuffix = "rd"
default: daySuffix = "th"
}
}
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "EEEE, MMMM dd'\(daySuffix)'"
return dateFormatter.string(from: date)
}
这返回了类似这样的内容:Thursday, August 27th
我现在可以在任何 UI 字符串组件上使用它,这些组件需要有一个纪元的漂亮日期。
@AndréSlotta 给出了一个很好的答案,所以所有的功劳都归于他。我刚刚更改了我的用例。