将字符串转换为日期在swift 3中不相同

将字符串转换为日期在swift 3中不相同,swift,Swift,为什么??我把字符串转换成日期,输入和输出不一样吗 Input: let formatter = DateFormatter() formatter.dateFormat = "yyyy-MM-dd" dateLahir = formatter.date(from: "2017-10-05") print("date: \(dateLahir)") Output: date: 2017-10-04 在Swift 3中 将日期转换为字符串 class func convertDateT

为什么??我把字符串转换成日期,输入和输出不一样吗

Input: 
let formatter = DateFormatter() 
formatter.dateFormat = "yyyy-MM-dd" 
dateLahir = formatter.date(from: "2017-10-05")
print("date: \(dateLahir)")

Output: 
date: 2017-10-04

在Swift 3中 将日期转换为字符串

class func convertDateToString(_ dateStr: String?, fromDateFormat currentFormat: String, toDateFormat newFormat: String) -> String? {

    if dateStr == nil {
        return nil
    }

    let formatter:DateFormatter = DateFormatter()
    formatter.dateFormat = currentFormat
    let date = formatter.date(from: dateStr!)

    if date == nil {
        return ""
    }

    formatter.dateFormat = newFormat
    let newStr: String = formatter.string(from: date!)

    return newStr
}
将字符串转换为日期

class func convertStringToDate(_ strDate: String, dateFormat: String) -> Date? {
    let formatter: DateFormatter = DateFormatter()
    formatter.dateFormat = dateFormat
    formatter.timeZone = TimeZone.autoupdatingCurrent

    let date = formatter.date(from: strDate)

    return date;
}

显示
打印(“date:\(dateLahir)”)的实际完整输出。
。顺便说一句,您的代码很好。您只需了解打印
Date
对象的输出。日期格式化程序将使用当前时区转换日期字符串,而
print
通常以GMT显示等效的日期/时间(您将在末尾看到一个
+0000
,这就是为什么rmaddy要求共享
print
语句中的完整字符串)。总之,不要担心时区
print
会使用什么。在转换到
日期对象和从
date
对象转换时始终使用日期格式化程序(例如,如果在应用程序中显示日期,请使用
DateFormatter
构建字符串以显示最终用户)。@Rob是正确的。只需添加:
let stringDate=formatter.string(from:dateLahir!)打印(“字符串日期:\(stringDate)”)
您将获得正确的日期。我想将日期保存在数据库中,但我从datepicker选择的日期是正确的,并且我在textfield中转换了日期。结果显示为上一个日期。请解释我的编码中是否缺少任何内容此示例编码将字符串转换为日期变量dateLate:date!让formatter=DateFormatter()formatter.dateFormat=“yyyy-MM-dd”dateLahir=formatter.date(起始日期:“2017-10-05”)