日期格式化程序中的艰难时期

Posted

技术标签:

【中文标题】日期格式化程序中的艰难时期【英文标题】:Tough Time in Date Formatter 【发布时间】:2020-07-23 12:31:02 【问题描述】:
if let date:Date = formatter.date(from: dateString) 
    formatter.dateFormat = "dd MMM yyyy hh:mm a
    print("Formatted Date:\(formatter.string(from: date))")
    return formatter.string(from: date)

日期格式“dd MMM yyyy hh: mm a”会根据设备设置显示时间吗? 当我在设置中打开 24 小时开关时,我可以看到设置中选择的正确格式的日期和时间(即 24 小时),当我关闭 24 小时开关时,我可以看到 12 小时格式。

但我的应用用户说,即使他在设置中打开了 24 小时制开关,他也无法看到 24 小时制时间。 欢迎任何建议和意见。谢谢

【问题讨论】:

"hh:mm a" 这是 12 小时格式。如果您想使用由当前区域设置和用户设置控制的格式,您应该使用 DateFormatter.dateStyle.timeStyle 属性。 格式化日期:2020 年 7 月 21 日晚上 8:41:25,但我专门在我的应用程序“dd MMM yyyy hh:mm”中以这种格式显示日期和时间(日期应该是首先,我不需要毫秒) 见下方答案 【参考方案1】:

正如 Joakim 在他们的评论中所说,dateFormat 属性设置了固定格式。

我认为没有一种“半固定”格式可以让您指定非标准格式,但仍尊重用户的 12/24 小时时间显示设置。

它将忽略用户的设置。如果您希望时间格式符合用户的区域设置和设置,请使用属性 dateStyle 和 timeStyle:

lazy var timeFormatter: DateFormatter = 
    let formatter = DateFormatter()
    formatter.dateStyle = .medium
    formatter.timeStyle = .medium
    return formatter
()

我在 Google 上进行了搜索,发现这个 (Objective-C) 代码可以让您判断用户请求的是 12 小时还是 24 小时时间:

https://spin.atomicobject.com/2011/05/03/detect-24-hour-user-settings-on-ios-devices/

将该代码转换为 Swift 并不难。 (理想情况下,您还应该订阅系统在用户更改其时钟/日历偏好时发出的通知。)

您可以使用它来计算用户的 12/24 小时设置,并相应地调整您的 dateFormat(为“dd MMM yyyy hh:mm a”或“dd MMM yyyy HH:mm a”)

【讨论】:

***.com/a/34962428/2703380 这帮助我解决了这个问题。谢谢@Joakim & Duncan

以上是关于日期格式化程序中的艰难时期的主要内容,如果未能解决你的问题,请参考以下文章

日期格式化程序不从应用程序中的字符串返回日期虽然在操场上工作

dd/mm/yyyy 是啥日期格式?

在运行时更改系统日期格式时更新 DatePicker 中的日期格式

Java字符串到日期转换

django中的日期格式日期字段

C#日期格式转换