使用日期格式后如何将退回的年份更改为2000

时间:2018-12-06 06:14:23

标签: ios swift date nsdateformatter

嗨,我想从 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

enter image description here

1 个答案:

答案 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