无法更改swift中日期的格式
我得到的日期是2019-01-02 18:10:00+0000现在我想把它转换成无法更改swift中日期的格式,swift,date,dateformatter,Swift,Date,Dateformatter,我得到的日期是2019-01-02 18:10:00+0000现在我想把它转换成dd/MM/yyyy HH:MM格式,但我无法得到它 我在日期扩展中使用此方法 func getDate() -> Date { let formatter = DateFormatter() formatter.timeZone = TimeZone(abbreviation: "UTC") formatter.dateFormat = "dd/MM/yyyy HH:mm" l
dd/MM/yyyy HH:MM
格式,但我无法得到它
我在日期扩展中使用此方法
func getDate() -> Date {
let formatter = DateFormatter()
formatter.timeZone = TimeZone(abbreviation: "UTC")
formatter.dateFormat = "dd/MM/yyyy HH:mm"
let dateString = formatter.string(from: self)
return formatter.date(from: dateString) ?? Date()
}
当xcode执行这一行时
let dateString = formatter.string(from: self)
结果是我想要的格式,但当最后一行被执行时,日期返回到旧格式,这是错误的。如果需要显示日期,可以使用格式化的
字符串
,而不是日期
对象
func getDate() -> String {
let formatter = DateFormatter()
// Set the appropriate time zone or locale
formatter.dateFormat = "dd/MM/yyyy HH:mm"
return formatter.string(from: self)
}
你很困惑。
Date
对象没有格式。它记录了一个瞬间。您必须将其转换为日期字符串以提供格式
您的代码可以做到这一点,这很好。但是,您要做的最后一件事是将其转换回日期
,并放弃您创建的格式化字符串。这毫无意义
服务器很可能需要一个日期字符串。您应该重写函数以返回日期字符串,如Rakesha Shastri的回答所示。@GulfamKhan显然服务器接受的是字符串而不是Swift
date
对象。是否有办法以这种格式获取日期,服务器需要它的日期格式。你是说这是服务器端问题,不是我这边的问题吗?@GulfamKhan我是说你的服务器接受字符串,当然不是Swift date对象。@Rob我在问题中没有看到任何与此相关的内容。但如果是这样,是的,一个特定的格式和时区是合适的。但是,区域设置也应该设置为en_US_POSIX
。还要注意的是,创建日期格式化程序的操作成本有些高。您的代码每次都会创建一个新的日期格式化程序。最好使函数成为需要它的类的函数,并将DateFormatter保存到一个惰性实例变量。是否将此日期发送到服务器?与服务器交换日期字符串有一些公认的约定,即ISO8601和RFC 3999。它的格式通常为“yyyy-MM-dd'T'HH:MM:ssX”
(即生成字符串“2019-01-02T19:23:31Z”)如果你的服务器当前接受的这个日期格式没有被凿成石头,你可能应该考虑使用一个更标准的约定,如这里所示。顺便说一下,如果你这样做,你也可以使用<代码> ISO8601DATEFALTATER ,它可以让你摆脱设置格式化程序字符串、区域设置、时区等的杂草。