Swift 将字符串转换为日期会中断本地时间

Swift 将字符串转换为日期会中断本地时间,swift,date,swift4,Swift,Date,Swift4,在我的示例中,我试图保存日志以测量今天和明天之间的日期 所以,我使用用户日期将其保存为旧日期。我的做法是: 1将旧日期另存为日期 2转换并将时区添加为字符串输出 3尝试转换回日期,以便我可以使用UTC时间记录日期 在第三步中,我的UTC小时失去了时间,我看到UTC 0时间 代码和输出的屏幕截图如下: 在这个过程中没有任何损失,一切都在那里。只是您知道printdate并不是按照您的要求打印的,而如果您打印日期对象,它将以UTC格式打印日期 参见下面的示例 let oldDate = Date(

在我的示例中,我试图保存日志以测量今天和明天之间的日期

所以,我使用用户日期将其保存为旧日期。我的做法是:

1将旧日期另存为日期 2转换并将时区添加为字符串输出 3尝试转换回日期,以便我可以使用UTC时间记录日期

在第三步中,我的UTC小时失去了时间,我看到UTC 0时间

代码和输出的屏幕截图如下:


在这个过程中没有任何损失,一切都在那里。只是您知道printdate并不是按照您的要求打印的,而如果您打印日期对象,它将以UTC格式打印日期

参见下面的示例

let oldDate = Date()
let dateFormat = DateFormatter()
dateFormat.dateFormat = "dd/MM/yy HH:mm"
dateFormat.calendar = Calendar.current
let oldDateFormattedString = dateFormat.string(from: oldDate)
print("Old date string: \(oldDateFormattedString)")
print("Old date: \(oldDate)")


let anotherDateFormat = DateFormatter()
anotherDateFormat.dateFormat = "dd/MM/yy HH:mm"
anotherDateFormat.calendar = Calendar.current
let anotherDate = anotherDateFormat.date(from: oldDateFormattedString)

print("Ano date: \(anotherDate!)")
控制台

旧日期字符串:30/11/17 16:35 旧日期:2017-11-30 11:05:47+0000 日期:2017-11-30 11:05:00+0000

您可以看到,打印oldDate和其他日期时,o/p几乎相同,只是秒数没有包含在日期格式字符串中

e、 g.在代码末尾添加这两行

let anotherDateString = anotherDateFormat.string(from: anotherDate!)
print("Ano date string: \(anotherDateString)")
您将看到您的控制台为

旧日期字符串:30/11/17 16:41 旧日期:2017-11-30 11:11:51+0000 日期:2017-11-30 11:11:00+0000 日期字符串:30/11/17 16:41


复制/粘贴代码,而不是屏幕截图。因此,您位于UTC前3小时的时区。请搜索“swift iOS日期关闭”,这意味着我无法将两个日期作为日期进行比较。为了得到本地时间,我必须比较两个字符串/整数,对吗?你可以比较两个日期,不需要转换为字符串