Swift将字符串转换为日期输出错误的日期

约翰

我想转换dateStartString = “28/02/2018”Date并将转换的日期与今天的日期进行比较。当我将dateStartString转换后的日期转换为"2018-02-27 18:30:00 UTC".why时,为什么输出错误的日期?

这是我的代码

var dateStartString = "28/02/2018"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd/MM/yyyy"
guard let dateStartDate = dateFormatter.date(from: dateStartString) else {
    fatalError("ERROR: Date conversion failed due to mismatched format.")
}

let dateToday = Date()

if(dateStartDate>=dateToday){
    print("Yes")
}
else{
    print("Today date is 28/02/2018. Why it print No?")
}

希望你理解我的问题。提前致谢。

清扫器

您需要了解,Date它不仅代表日期,还代表时间

>=比较Date对象的日期和时间部分由于您没有在日期字符串中指定任何时间,因此API假定其为您当地时间的00:00:00(UTC前一天的18:30:00)。为什么问UTC?那就是现在的description日期。当您打印日期时,它总是以UTC时间打印。要在您的时区中打印它,请设置timeZone日期格式器属性并对其进行格式化。

仅比较日期成分的一种方法是删除时间成分。从此答案中,这是删除时间分量的方法:

public func removeTimeStamp(fromDate: Date) -> Date {
    guard let date = Calendar.current.date(from: Calendar.current.dateComponents([.year, .month, .day], from: fromDate)) else {
        fatalError("Failed to strip time from Date object")
    }
    return date
}

现在这应该是正确的:

dateStartDate >= removeTimeStamp(fromDate: dateToday)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章