【问题标题】:Swift. Set specific time format(12/24h) for custom Locale迅速。为自定义区域设置特定时间格式(12/24 小时)
【发布时间】:2018-08-21 12:10:39
【问题描述】:

我想根据用户首选项中的“24 小时制”选项从 DateFormatter 获取 12 小时或 24 小时格式的时间。

如果我像这样设置 "24-Hour-Time" = "on" 和 DateFormatter:

    let formatter = DateFormatter()
    let locale = Locale(identifier: "en_US")
    print(locale)                            // "en_US (fixed)\n"
    formatter.locale = locale 
    formatter.dateStyle = .none
    formatter.timeStyle = .short

    formatter.string(from: Date()) // "2:54 PM" (not "14:54")

但如果我设置:

    let locale = Locale.current   // "en_US (current)\n"

而不是

    let locale = Locale(identifier: "en_US") // "en_US (fixed)\n"

结果将是

formatter.string(from: Date()) // "14:54"

如何创建自定义区域设置 12 或 24 小时格式。

【问题讨论】:

  • 我不知道您要达到什么目的,但您可以检查用户的 24h 设置并根据它设置自定义 dateFormat。 extension DateFormatter { var is24h: Bool { return DateFormatter.dateFormat(fromTemplate: "j", options: 0, locale: .current)?.contains("a") == false } }

标签: ios swift nsdateformatter nslocale


【解决方案1】:

//MARK:- 使用它来将 24 小时时间格式转换为 12 小时格式字符串

 func TwelveHourFormateFrom24Hours(time : String)->String
    {
        let Time = time.components(separatedBy: ".")
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "H:mm:ss"

        if let inDate = dateFormatter.date(from: Time[0])
        {
            dateFormatter.dateFormat = "h:mm a"
            dateFormatter.timeZone = TimeZone.current
            let outTime = dateFormatter.string(from: inDate)
            print("in \(time)")
            print("out \(outTime)")
            return outTime
        }
        return time
    }

//MARK:- 24 小时格式字符串

 func TwentyFourHourFormate(time : String)->String
    {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "h:mm a"

        if let inDate = dateFormatter.date(from: time)
        {
            dateFormatter.dateFormat = "H:mm:ss.sss"
            let outTime = dateFormatter.string(from: inDate)
            print("in \(time)")
            print("out \(outTime)")
            return outTime
        }
        return time
    }

【讨论】:

  • 格式之间转换日期不是问题
  • 它也适用于 Date 请我的代码并理解。我已经将字符串转换为日期,所以你使用直接日期而不是字符串。
猜你喜欢
  • 2020-12-15
  • 2020-06-29
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多