Datepickerselect错误的date

我将date转换为date,但是如果我只是在dateselect器中打印当前选定的date,我会得到错误的时间和错误的date。

@IBOutlet weak var datepicker: UIDatePicker! @IBAction func displayDay(sender: AnyObject) { var chosenDate = self.datepicker.date println(chosenDate) 

我已经select了date。 在这里输入图像说明

然后点击datepicker下面的button。 我在输出中得到以下行

  2015-01-11 20:17:37 +0000 

有人可以告诉我,输出有什么问题吗?

这很好,因为dateselect器使用当地时间,但它存储UTC时间。 这意味着你的本地时间偏移是-5h。 您可以按照以下步骤从中提取正确的date和时间:

 extension NSDate { var localizedDescription: String { return descriptionWithLocale(NSLocale.currentLocale()) ?? "" } } println(chosenDate.localizedDescription) 

Swift 3或更高版本

 extension Date { var localizedDescription: String { return description(with: .current) } } 

 Date().localizedDescription // "Monday, October 16, 2017 at 2:24:11 AM Brasilia Summer Time" 

使用此方法获取正确的date:

 func getDateStamp(date:String)-> String{ let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss +SSSS" dateFormatter.timeZone = TimeZone(abbreviation: "UTC") guard let date = dateFormatter.date(from: date) else { // assert(false, "no date from string") return "" } dateFormatter.dateFormat = "dd MMMM,yyyy" //"yyyy-MM-dd" dateFormatter.timeZone = TimeZone.current let st = dateFormatter.string(from: date) return st } 

Swift 3.0 – 如果你想获得date格式的结果,然后使用下面的代码。

 extension Date { var convertedDate:Date { let dateFormatter = DateFormatter(); let dateFormat = "dd MMM yyyy"; dateFormatter.dateFormat = dateFormat; let formattedDate = dateFormatter.string(from: self); dateFormatter.locale = NSLocale.current; dateFormatter.timeZone = TimeZone(abbreviation: "GMT+0:00"); dateFormatter.dateFormat = dateFormat as String; let sourceDate = dateFormatter.date(from: formattedDate as String); return sourceDate!; } } print(pickerView.date.convertedDate)