如何在 Swift 4 中将日期格式化为特定格式?

How to format a Date to a specific format on Swift4?

我必须将 Date() 创建的对象格式化为特定格式,此格式必须显示日期,如:

28 may, 2018 11:00:32

我有一个函数来制作 Date() 的格式,但格式如下:

yyyy-MM-dd HH:mm:ss

函数工作:

static func dateFormatTime(date : Date) -> String {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
        return dateFormatter.string(from: date)
    }

但我不知道如何制作这种格式:dd MMM, yyyy HH:mm:ss

简单地说,您所要做的就是将 dateFormatter.dateFormat 值更改为所需的格式,即 "dd MMM, yyyy hh:mm:ss"在你的情况下:

func dateFormatTime(date : Date) -> String {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "dd MMM, yyyy hh:mm:ss"
    return dateFormatter.string(from: date)
}

因此:

let str = dateFormatTime(date: Date())
print(str) // 29 May, 2018 12:18:08

时区:

您也可以像这样设置所需的时区:

dateFormatter.timeZone = TimeZone(identifier: "UTC")

更新:

感谢 @rmaddy for suggesting using date styles (dateStyle and timeStyle 属性)而不是编辑日期格式。

When displaying a date to a user, you set the dateStyle and timeStyle properties of the date formatter according to your particular needs... Based on the values of the dateStyle and timeStyle properties, DateFormatter provides a representation of a specified date that is appropriate for a given locale.

DateFormatter - Working With User-Visible Representations of Dates and Times.

因此:

func dateFormatTime(date : Date) -> String {
    let dateFormatter = DateFormatter()
    
    dateFormatter.dateStyle = .long
    dateFormatter.timeStyle = .medium
    
    dateFormatter.timeZone = TimeZone(identifier: "UTC")
 
    return dateFormatter.string(from: date)
}

let str = dateFormatTime(date: Date())
print(str) // May 29, 2018 at 12:45:08 AM