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

标签 ios swift date swift3

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

这是我的代码

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 属性并对其进行格式化。

仅比较日期部分的一种方法是删除时间部分。从这个answer ,这是您删除时间分量的方式:

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)

关于ios - Swift 将字符串转换为日期输出错误的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49023814/

相关文章:

ios - 具有 subview 屏幕的自动布局会在不同设备上发出问题

r - xts 对象中每月的第 N 天

ios - SwiftUI - 计算 ScrollView 中长 GeometryReader 的高度

ios - PhoneGap Meteor iOS 推送通知

ios - 如何在共享菜单中列出?

java - 这与只返回 new System.currentTimeMillis() 有什么不同吗?

SQL 查询帮助 : Transforming Dates In A Non-Trivial Way

ios - VoIP相当于Coretelephony

ios - 弱委托(delegate)变为零

ios - swift removingPercentEncoding 不适用于 gb2312 字符串