【问题标题】: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”中以这种格式显示日期和时间(日期应该是首先,我不需要毫秒)
  • 见下方答案

标签: ios swift dateformatter


【解决方案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”)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-17
  • 1970-01-01
  • 2018-10-03
  • 2017-04-29
  • 1970-01-01
相关资源
最近更新 更多