你好我有一本字典
self.publishedAt = dictionary["publishedAt"] as? NSString
我正在约会“ 2017-01-27T18:36:36Z ”。我想转换它 可读格式: dd-MM-yyyy hh:mm:ss 。我试过了
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd-MM-yyyy hh:mm:ss"
let date = dateFormatter.date(from: (self.publishedAt as? String)!)
print("EXACT_DATE : \(date)")
但是没有。 :(
以简单格式获取日期的正确方法是什么?
答案 0 :(得分:37)
您需要输入格式将ISO8601字符串转换为日期,并使用输出格式将日期转换回字符串:
let string = "2017-01-27T18:36:36Z"
let dateFormatter = DateFormatter()
let tempLocale = dateFormatter.locale // save locale temporarily
dateFormatter.locale = Locale(identifier: "en_US_POSIX") // set locale to reliable US_POSIX
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
let date = dateFormatter.date(from: string)!
dateFormatter.dateFormat = "dd-MM-yyyy HH:mm:ss"
dateFormatter.locale = tempLocale // reset the locale
let dateString = dateFormatter.string(from: date)
print("EXACT_DATE : \(dateString)")
答案 1 :(得分:15)
将字符串转换为Date
对象:
let string = "2017-01-27T18:36:36Z"
let isoFormatter = ISO8601DateFormatter()
let date = isoFormatter.date(from: string)!
或者,如果您需要支持早于ISO8601DateFormatter
的iOS版本:
let isoFormatter = DateFormatter()
isoFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssX"
isoFormatter.locale = Locale(identifier: "en_US_POSIX")
isoFormatter.timeZone = TimeZone(secondsFromGMT: 0)
let date = isoFormatter.date(from: string)!
(要了解我们为ISO 8601日期格式化程序设置locale
的原因,请参阅Apple Technical Q&A 1480。)
然后,要将其转换为用户友好的日期格式,您将使用单独的格式化程序(或使用上面的第二个示例,您可以重新使用格式化程序,但请记住重置locale
回到Locale.current
):
let formatter = DateFormatter()
formatter.dateStyle = .short
formatter.timeStyle = .medium
let result = formatter.string(from:date)
注意,我建议在将日期呈现给用户而不是dateFormat
字符串时使用这些样式参数,因此它使用适合其语言环境的样式,而不是假设他们需要24小时时钟和/或他们是否使用dd-MM-yyyy
vs MM-dd-yyyy
格式。
注意,更改日期格式化程序的格式(例如更改dateFormat
字符串)是一个相对昂贵的过程,因此如果您要为多个日期执行此过程,请不要只使用一个DateFormatter
并不断地反复更改其dateFormat
或样式(或者更糟糕的是,为每个日期实例化新的格式化程序)。相反,每个日期格式样式创建一个格式化程序,并尽可能重复使用它。
答案 2 :(得分:0)
只需在代码(swift 4.2)中使用该函数即可。
public func convertDateFormatter(date: String) -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"//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 = "HH:mm a"///this is what you want to convert format
dateFormatter.timeZone = NSTimeZone(name: "UTC") as TimeZone!
let timeStamp = dateFormatter.string(from: convertedDate!)
print(timeStamp)
return timeStamp
}
谢谢