0

我正在使用设备时间来获取日期组件。这适用于 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)
4

5 回答 5

2

因此,您遇到的核心问题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它本身并没有“格式”的概念,超出其“调试”输出提供的范围,因此您不能更改 aDate的格式,而是使用格式化程序来“表示”以Date某种人类可读的形式。

于 2020-02-21T07:06:18.963 回答
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)}

这将以这种格式返回一个日期 --> "January 21, 05:30 am"

于 2021-01-20T22:27:49.637 回答
1

我刚刚在下面尝试过它在两种情况下都可以正常工作。with AMor PMor 24Formatand if you remove ainformatter.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

于 2020-02-21T06:37:42.500 回答
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)
}
于 2020-02-21T06:39:16.493 回答
0

斯威夫特-这个答案帮助了我

swift - 如何将日期从上午/下午转换为 24 小时格式

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

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