我想将日期显示为6 月 13 日星期六.
如果日期是当天,则应显示Today像那样Tomorrow, 昨天.
我无法同时实现这两个目标
guard let date = Date(fromString: "16 September 2020",
format: "dd MMMM yyyy") else { return nil }
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .medium
dateFormatter.doesRelativeDateFormatting = true
header.titleLabel.text = dateFormatter.string(from: date)
对于上面的代码,我可以将日期显示为Today Tomorrow 昨天但其他日期没有显示6 月 13 日星期六。我尝试应用日期格式dateFormatter.dateFormat = "EEEE, MMM d"
对于相同的dateFormatter
它什么也没返回。
设置时 DateFormatter 表现不佳doesRelativeDateFormatting = true
并尝试同时应用自定义格式。所以最简单的解决方案是使用 a 给出的格式Style
and a Locale
let relativeDateFormatter = DateFormatter()
relativeDateFormatter.timeStyle = .none
relativeDateFormatter.dateStyle = .medium
relativeDateFormatter.locale = Locale(identifier: "en_GB")
relativeDateFormatter.doesRelativeDateFormatting = true
Example
let inputFormatter = DateFormatter()
inputFormatter.dateFormat = "yyyy-MM-dd"
let dates = ["2020-09-01", "2020-09-15", "2020-09-16", "2020-09-30"].compactMap { inputFormatter.date(from: $0)}
for date in dates {
print(relativeDateFormatter.string(from: date))
}
2020 年 9 月 1 日
昨天
Today
2020 年 9 月 30 日
现在,如果您想应用自定义格式,在使用相同的 DateFormatter 实例时我还没有找到解决方案,因此我们需要为自定义格式创建一个新的格式并将其与检查一起使用,因此我们仅在以下情况下应用自定义格式:这不是今天等
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "EEEE, MMM dd"
for date in dates {
let string = relativeDateFormatter.string(from: date)
if let _ = string.rangeOfCharacter(from: .decimalDigits) {
print(dateFormatter.string(from: date))
} else {
print(string)
}
}
9 月 1 日星期二
昨天
Today
9 月 30 日星期三
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)