我注意到指两天前的特定日期被格式化程序本地化为昨天
。是否有一个配置可以设置为 2 天前?以下是复制该问题的代码:
func getDateFromString(_ dateTimeString: String) -> Date {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ"
return dateFormatter.date(from:dateTimeString)!
}
let targetDateStr = "2022-02-08T19:50:11.333017Z"
let nowStr = "2022-02-10T16:57:10.000017Z"
let targetDate = getDateFromString(targetDateStr)
let now = getDateFromString(nowStr)
let formatter = RelativeDateTimeFormatter()
formatter.dateTimeStyle = .named
formatter.unitsStyle = .short
let s = formatter.localizedString(for: targetDate, relativeTo: now) // "yesterday"
我注意到格式化程序仅在 48 小时过去后才生成“2 天前”,有没有办法更改此行为,以便将 2022-02-08 上的任何小时视为 2 天前?
编辑
问题已解决:需要删除小时/分钟/等。来自日期的信息,然后格式化程序将按预期运行。谢谢@Dev
func getDateFromString(_ dateTimeString: String) -> Date {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ"
let date = dateFormatter.date(from:dateTimeString)!
let calendar = Calendar.current
let components = calendar.dateComponents([.year, .month, .day], from: date)
return calendar.date(from: components)!
}
最佳答案
我没有使用过 swift,但是 .date 函数是否返回一个仅包含日期或同时包含日期和时间的日期对象?我想如果您只比较日期(yyyy-MM-dd 组件)而不是日期和时间,它会起作用。
链接到有关删除时间戳组件的线程 Convert string to date in Swift
关于swift - relativeDateTimeFormatter 表示 2 天前的日期是昨天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71069385/