swift - relativeDateTimeFormatter 表示 2 天前的日期是昨天

标签 swift

我注意到指两天前的特定日期被格式化程序本地化为昨天。是否有一个配置可以设置为 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/

相关文章:

ios - Realm.framework/Headers 没有那个文件或目录

objective-c - 我不能使用 touchesBegan/Moved/Ended 和 UITapGestureRecognizer

ios - 具有多个参数的 Swift 函数

ios - NSTimer 不调用选择器中的方法

swift - 方法闭包是否在 swift 中保留实例?

ios - 平移 - 平移之前图像的初始位置

swift - 我如何在 collectionView 的每一行的单元格上显示 4 个图像

ios - SearchDirectories 与 URLsDirectory - iOS

string - Swift 和 XCode 6 - 将整数转换为字符串

ios - Swift UIScrollView 不滚动但响应 setContentOffset 和 Delegate 响应