【问题标题】:How can I sort two different dates?如何对两个不同的日期进行排序?
【发布时间】:2020-09-27 19:48:43
【问题描述】:

如何对两个不同的日期进行排序? 我需要为此使用数组吗? 我无法运行这些代码。

let testArray = ["25 Temmuz 2016", "30 Temmuz 2016"]
var convertedArray: [Date] = []

var dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd MMMM yyyy"// yyyy-MM-dd"

for dat in testArray {
    let date = dateFormatter.date(from: dat)
    if let date = date {
        convertedArray.append(date)
    }
}

var ready = convertedArray.sorted(by: { $0.compare($1) == .orderedDescending })

print(ready)

【问题讨论】:

  • 这能回答你的问题吗? Sort Objects in Array by date
  • 我试过了,但是没用。
  • 什么不起作用? convertedArray 中有什么内容?输出是什么?确定问题出在哪里是一大步:是字符串 -> 日期吗?是那种?等

标签: swift xcode date time


【解决方案1】:

如果您要解析本地化日期,您可能需要设置正确的区域设置。

尝试以下操作(我假设您使用的是土耳其语区域设置):

let testArray = ["25 Temmuz 2016", "30 Temmuz 2016"]

var dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "tr_TR")
dateFormatter.dateFormat = "dd MMMM yyyy"

let convertedArray = testArray
    .compactMap(dateFormatter.date)
    .sorted(by: >)

print(convertedArray)

根据 LeoDabus 的 answer,如果有夏令时转换,您可能还需要指定日历:

dateFormatter.calendar = Calendar(identifier: .iso8601)

【讨论】:

  • 为什么选择 UTC 时区?
  • 顺便说一句compactMap(dateFormatter.date)
  • 为什么要解析不同时区的日期?请注意,如果您尝试解析日光转换日期,则如果您不设置 dateFormatter 日历属性,这也可能会失败。关于“2016-07-24 23:00:00 +0000”,这是 UTC 时间表示而不是本地时间。如果您使用 dateFormatter 来显示它,它将显示正确的日期。
  • let convertedArray = testArray.sorted { dateFormatter.date(from: $0) ?? .distantPast > dateFormatter.date(from: $1) ?? .distantPast } 并删除 UTC 时区
  • 就在夏令时转换的地方。这取决于位置。例如,在巴西,它曾经有到 2017 年,但现在没有了。没那么简单。这也取决于转换是否发生在一天的开始
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-15
  • 2018-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多