【问题标题】:How can i Convert (2020-02-21 06:07:21 +0000) to "21 Feb 2021 12:00 AM"?如何将 (2020-02-21 06:07:21 +0000) 转换为“2021 年 2 月 21 日 12:00 AM”?
【发布时间】:2020-06-05 13:18:46
【问题描述】:

我正在使用设备时间来获取日期组件。这适用于 12 小时甲酸,但如果用户将设备时间更改为 24 小时,则会显示错误的计算。使用以下方法进行转换,但总是返回 nil。

            let dateAsString = "\(Date())"
            let df = DateFormatter()
            df.dateFormat = "yyyy-mm-dd HH:mm:ss zzz"

            let date = df.date(from: dateAsString)
            df.dateFormat = "d MMM yyyy h:mm a"

            let time12 = df.string(from: date!)
            print(time12)

【问题讨论】:

  • 嗯,从mm 开始是分钟
  • 我不明白,你能解释一下吗?
  • 你的问题很混乱。您有当前的今天日​​期,但想打印上个月的第一天日期。 stackoverflow.com/questions/33605816/…
  • yyyy-mm-dd HH:mm:ss zzz 说,“将我的日期值转换为年-分-日时:分:秒时区”

标签: swift nsdateformatter nsdatecomponents nsdatepicker


【解决方案1】:

我刚刚在下面尝试过,它在两种情况下都可以正常工作。使用AMPM24Format 并且如果您在formatter.dateFormat = "dd MMM yyyy HH:mm a" 中删除a,则会为您提供24 格式。即使我在我的代码中使用它。

let someDate = Date()
let formatter = DateFormatter()
formatter.dateFormat = "dd MMM yyyy HH:mm a"
let someDateTime = formatter.string(from: someDate)
print(someDateTime)

打印:

21 Feb 2020 09:35 AM

【讨论】:

    【解决方案2】:

    试试,

    let str = "2020-02-21 06:07:21 +0000"
    let formatter = DateFormatter()
    formatter.dateFormat = "yyyy-mm-dd hh:mm:ss zzz"
    if let date = formatter.date(from: str) {
        formatter.dateFormat = "dd MMM yyyy hh:mm a"
        let formattedDate = formatter.string(from: date)
        print(formattedDate)
    }
    

    【讨论】:

      【解决方案3】:

      Swift-这个答案帮助了我

      swift - how to convert date from am/pm to 24 hour format

      // 也在这里发布我的作品。

      1. 我有 24 小时的设备格式。
      2. 我需要在 12 小时内。
      3. 所以我只是使用此代码 sn-p 将日期对象转换为所需的甲酸盐。 let df = DateFormatter() df.dateFormat = "d MMM yyyy h:mm a" let time12 = df.string(from: Date()) print(time12)

      【讨论】:

        【解决方案4】:

        所以,您遇到的核心问题是yyyy-mm-dd 使用的是分钟的mm,而不使用的是几个月的MM

        所以,如果你尝试了类似...

        let dateAsString = "\(Date())"
        let df = DateFormatter()
        df.dateFormat = "yyyy-MM-dd HH:mm:ss zzz"
        
        let date = df.date(from: dateAsString)
        df.dateFormat = "d MMM yyyy h:mm a"
        
        let time12 = df.string(from: date!)
        

        这会导致

        21 Feb 2020 6:00 PM
        

        现在,问题是,你可以这样做

        let df = DateFormatter()    
        df.dateFormat = "d MMM yyyy h:mm a"
        df.string(from: Date())
        

        并得到相同的结果。

        请记住,Date 本身没有“格式”的概念,超出其“调试”输出提供的范围,因此您无法更改 Date 的格式,而是使用一个格式化程序,以某种人类可读的形式“表示”Date 的值。

        【讨论】:

          【解决方案5】:

          试试这个:

          let date : "2021-01-20T21:40:59.416Z"
          
          func setDate(date: String) -> String {
             var interval: Double = 0
             let convertedDate = date.components(separatedBy: ":")
          
             for (index, part) in convertedDate.reversed().enumerated() {
                 interval += (Double(part) ?? 0) * pow(Double(60), Double(index))
             }
          
             let date = Date(timeIntervalSinceNow: interval)
          
             let formatter = Foundation.DateFormatter()
             formatter.dateFormat = "LLLL dd, HH:mm at"
             return formatter.string(from: date)}
          

          这将返回此格式的日期 --> "1 月 21 日 05:30 am"

          【讨论】:

            猜你喜欢
            • 2021-08-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-06-23
            • 2022-12-22
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多