Ios dateFromString()返回错误的日期swift 3.0

Ios dateFromString()返回错误的日期swift 3.0,ios,swift3,Ios,Swift3,我正在fromDate.text(文本字段)中传递“01/12/2017”,但收到意外输出 let formatter = DateFormatter.init() formatter.dateFormat = "dd/mm/yyyy" startDate = formatter.date(from: fromDate.text!) print("startDate = \(startDate)") 输出为:2016年12月31日必须为dd/MM

我正在fromDate.text(文本字段)中传递“01/12/2017”,但收到意外输出

      let formatter = DateFormatter.init()
      formatter.dateFormat = "dd/mm/yyyy"
      startDate = formatter.date(from: fromDate.text!)
      print("startDate = \(startDate)")

输出为:2016年12月31日

必须为dd/MM/yyyydateformat
MM
大写。

日期格式应为
dd/MM/yyyy
而不是
dd/MM/yyyyy
mm
表示分钟,
mm
表示月份

并在代码中添加以下行

formatter.timeZone = TimeZone(abbreviation: "GMT+0:00")
这行代码设置时区。如果您没有,那么您将在输出中获得2017年11月30日的


这背后的原因是当字符串日期不包含时间时,格式化程序会假定它是午夜,并且您也没有指定时区,因此它将采用当前时区。

日期以UTC(零)时区打印。这是打印的问题,而不是日期的问题。假设是MM不是MM。你是否制作了一个可以计算新年前时间的应用程序?还有,为什么是Swift 3.0?现在每个人都使用Swift 4.0。@kelin
每个人都使用Swift 4.0
-我不这么认为。有统计数据吗?@AdityaSrivastava,这里是:
时区(secondsFromGTM:0)
比使用字符串要好得多。
 func convertToString(of dateTo: Date) -> String {

        let dateFormatter = DateFormatter()

        dateFormatter.dateFormat = "dd/MM/yyyy" //Your New Date format as per requirement change it own

        let newDate: String = dateFormatter.string(from: dateTo) //pass Date here

        print(newDate) //New formatted Date string

        return newDate
    }