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)