Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法更改swift中日期的格式_Swift_Date_Dateformatter - Fatal编程技术网

无法更改swift中日期的格式

无法更改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

我得到的日期是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"
    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 ,它可以让你摆脱设置格式化程序字符串、区域设置、时区等的杂草。