嗨,我想从 Date()获取当前的小时和分钟,因此我需要将其格式化为字符串,并希望重新输入日期。但是,当我尝试将日期更改为日期更改为2000年之后,如何返回当前年份。
//date formatter
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH:mm"
dateFormatter.timeZone = TimeZone.current
// Get current time and format it to compare
var currentTime = Date() //Get current time
let currentTimeStr = dateFormatter.string(from: currentTime) //get current time only hour and minute
currentTime = dateFormatter.date(from: currentTimeStr)! //this is where the problem because the year change into 1 January 2000
答案 0 :(得分:1)
根据我在评论中看到的内容,我认为您既希望Date对象中的当前时间,又想要一个只有小时和分钟的"HH:MM"
格式的字符串。
问题来自尝试使用未指定年份的格式化程序。您正在从未定义年(或日或月)的字符串中覆盖currentTime
,因此它的默认值为2000年1月1日(小时和分钟应正确)。
您还说您需要将其格式化为String,然后返回Date对象。 您没有,Date对象中已经具有所需的所有数据,因此请保留它们并在需要时使用。如果这意味着在整个项目中创建一堆DateFormatters
,则始终可以扩展Date
以使其具有返回所需格式的字符串的函数或变量。
extension Date {
var hoursAndMinutesString: String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH:mm"
dateFormatter.timeZone = TimeZone.current
return dateFormatter.string(from: self)
}
}
然后仅在需要时从Date对象调用函数,如下所示:
currentTime.hoursAndMinutesString