iOS Swift 3:将“yyyy-MM-dd'T'HH:mm:ssZ”格式字符串转换为日期对象

时间:2017-01-28 07:32:29

标签: ios swift nsdate

你好我有一本字典

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)") 

但是没有。 :(

以简单格式获取日期的正确方法是什么?

3 个答案:

答案 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
}

谢谢