如何将(2020-02-21 06:07:21 +0000)转换为“ 2021年2月21日上午12:00”?

时间:2020-02-21 06:16:30

标签: swift nsdateformatter nsdatecomponents nsdatepicker

我正在使用设备时间来获取日期组件。这可以正常使用12小时formate,但是如果用户将设备时间更改为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)

5 个答案:

答案 0 :(得分:1)

我刚刚尝试过在两种情况下都可以正常工作。与AMPM24Format一起使用,如果您将a中的formatter.dateFormat = "dd MMM yyyy HH:mm 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

答案 1 :(得分:1)

因此,您遇到的核心问题是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的值。

答案 2 :(得分:1)

试试这个:

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”

答案 3 :(得分:0)

尝试

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

答案 4 :(得分:0)

迅速,这个答案对我有帮助

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

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

  1. 我在24小时内收到了装置甲。
  2. 我需要12小时。
  3. 所以我只是将日期对象转换为此代码段的必需格式。 let df = DateFormatter() df.dateFormat = "d MMM yyyy h:mm a" let time12 = df.string(from: Date()) print(time12)