如何将timeFormat的dateFormatter值(例如Jul 07,2019)转换为Jul 7,2019?

时间:2019-07-16 01:26:28

标签: ios swift nsdate nsdateformatter

我制作了一个convertDate类,用于转换时间戳,该时间戳为Date()。sinceReferenceDate(即从2001年1月1日12:00 am开始)。我有一个问题:时间戳的日期超过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)"

1 个答案:

答案 0 :(得分:1)

要直接回答您的问题,您只需要在日期上使用单个'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语言环境,将输出“ 7 Jul”。