如何从格式化的日期字符串中删除“ at”?

And*_*ani 3 nsdateformatter swift dateformatter

这是日期格式设置程序:

let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .medium
dateFormatter.timeStyle = .medium
Run Code Online (Sandbox Code Playgroud)

预期产量:

Aug 13, 2017 6:04:11 PM
Run Code Online (Sandbox Code Playgroud)

电流输出:

Aug 13, 2017 at 6:04:11 PM
Run Code Online (Sandbox Code Playgroud)

理想情况下,如何在不指定格式字符串的情况下删除“ at”一词,它来自何处?

在奥地利德语语言环境中:

dateFormatter.locale = Locale(identifier: "de_AT")
13.08.2017, 18:04:11
Run Code Online (Sandbox Code Playgroud)

使用美国英语语言环境:

dateFormatter.locale = Locale(identifier: "en_US")
Aug 13, 2017 at 6:04:11 PM
Run Code Online (Sandbox Code Playgroud)

Mar*_*n R 5

一种选择是进行两个单独的转换,一个仅设置,一个仅dateStyle = .medium设置 timeStyle = .medium,然后连接结果。但我不知道

<date><space><time>
Run Code Online (Sandbox Code Playgroud)

格式适用于所有语言和地区。

更好的方法是使用setLocalizedDateFormatFromTemplate

dateFormatter.setLocalizedDateFormatFromTemplate("MMM dd yyyy jj:mm:ss")
Run Code Online (Sandbox Code Playgroud)

这接近于您想要的,并且保证为所有语言环境设置提供合理的结果。这里有一些例子。

zh_CN:2017年8月13日,下午6:33:54
de:13.八月2017,18:33:54
ja:2017?8?13?18:33:54

请注意jj小时格式的使用,这将被解释为HH(24小时格式)或hh(12小时AM / PM格式),具体取决于区域设置。


Dáv*_*tor -4

您可以使用以下命令实现预期输出

dateFormatter.dateFormat = "MMM dd, yyyy h:mm:ss a"

由于当前区域设置,该at单词被放在那里,因此如果您想在所有区域设置中删除它,您应该指定确切的日期格式,如上面所示。

  • 对特定的日期和时间格式进行硬编码是很糟糕的做法。对于不同区域设置中的大多数用户来说,这会导致非常意外的日期和时间。 (4认同)