如何将 dateFormatter 值(例如 2019 年 7 月 7 日)从时间戳转换为 2019 年 7 月 7 日?

How to turn a dateFormatter value such as Jul 07, 2019 into Jul 7, 2019 from timestamp?

我制作了一个 convertDate class 用于转换我的时间戳的功能,这些时间戳是 Date().sinceReferenceDate(即自 2001 年 1 月 1 日起 12:00am)。我有一个问题:当时间戳的日期超过 3 周前,我使用日期格式(月、日、年(如果早于当年)),但问题是如果一天不超过 10,然后这一天看起来像这样:01,02,03(7 月 1 日,7 月 2 日)等,而我需要它是 1,2,3(7 月 1 日,7 月 2 日)。我一直找不到解决方案,这是我的代码:

let nowTime = Date.timeIntervalSinceReferenceDate
let finalTime = nowTime - mediaTimestamp //how long ago in seconds...

//For timestamp coverting below
print(mediaTimestamp, "<-- datfasfePass")
let timeToModify = Date(timeIntervalSinceReferenceDate: mediaTimestamp)
let formatter = DateFormatter()
formatter.dateFormat = "MMM dd, yyyy"

//Below is for excluding the 2019 if the current year is 2019
let formatterForYear = DateFormatter()
formatterForYear.dateFormat = "yyyy"
let currentYear = "2019" //this is hardcoded right now
let finalYearDetermine = formatterForYear.string(from: timeToModify)
let currentFormatterYear = finalYearDetermine
print(currentFormatterYear, "<-- currentFormatterYear")

var finalDate = formatter.string(from: timeToModify)

if currentYear == finalYearDetermine {
    //then its currently 2019 whitch means we exclude the 2019
    formatter.dateFormat = "MMM dd"
    finalDate = formatter.string(from: timeToModify)
} else {
    //do nothing to dateformtter
}

finalDateString = "\(finalDate)"

要直接回答您的问题,您只需使用一个 'd' 作为日期,例如:

formatter.dateFormat = "MMM d"

但是您应该考虑使用设备区域设置来显示您的日期。如果您没有设置格式或覆盖 locale 属性:

,DateFormatter 会自动执行此操作
let formatter = DateFormatter()
formatter.dateStyle = .medium

编辑: 要在仍然支持设备区域设置的同时删除年份组件,您可以使用:

let formatter = DateFormatter()
formatter.setLocalizedDateFormatFromTemplate("MMMd")

这将为 en_US 语言环境输出 "Jul 6",但对于 en_AU 语言环境输出“6 Jul”(例如)。