我如何将 (2020-02-21 06:07:21 +0000) 转换为“21 Feb 2021 12:00 AM”?

How can i Convert (2020-02-21 06:07:21 +0000) to "21 Feb 2021 12:00 AM"?

我正在使用设备时间来获取日期组件。这适用于 12 小时 formate,但如果用户将设备时间更改为 24 小时,则会显示错误的计算。使用以下方法转换但它总是 return 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)

我刚刚在下面尝试过它在这两种情况下都可以正常工作。使用 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

试试,

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)
}

Swift-这个回答对我有帮助

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

// 在这里也张贴我的作品。

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

所以,您遇到的核心问题是 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 本身没有 "format" 的概念,超出其 "debug" 输出提供的内容,因此您无法更改 Date 的格式,相反,您使用格式化程序 "represent" 以某种人类可读的形式 Date 的值。

试试这个:

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)}

这将return一个这种格式的日期 --> “1 月 21 日,05:30 上午”