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

How to remove 'at' from formatted date string?

这是日期格式化程序设置:

let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .medium
dateFormatter.timeStyle = .medium

预期输出:

Aug 13, 2017 6:04:11 PM

当前输出:

Aug 13, 2017 at 6:04:11 PM

如何在不指定格式字符串的情况下理想地删除'at'单词,它来自哪里?

使用奥地利德语语言环境:

dateFormatter.locale = Locale(identifier: "de_AT")
13.08.2017, 18:04:11

使用美国英语语言环境:

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

你可以把它写成一个字符串,然后用text.Replace来替换它。

您可以使用

实现预期的输出

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

at 单词放在那里是因为当前的区域设置,所以如果你想为所有区域设置去掉它,你应该指定确切的日期格式,如上所示。

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

<date><space><time>

格式在所有语言和区域设置中都有意义。

更好的方法是使用 setLocalizedDateFormatFromTemplate:

dateFormatter.setLocalizedDateFormatFromTemplate("MMM dd yyyy jj:mm:ss")

这很接近你想要的,并且保证给你一个 所有区域设置的合理结果。这里有一些例子。

en_US:   Aug 13, 2017, 6:33:54 PM
de:      13. Aug. 2017, 18:33:54
ja:      2017年8月13日 18:33:54

注意小时的jj格式的用法,这将被解释 作为 HH(24 小时格式)或 hh(12 小时 AM/PM 格式),具体取决于 在语言环境上。