6

I am converting date to day, but if I just println() the current selected date in the datepicker, I get wrong time and wrong date.

@IBOutlet weak var datepicker: UIDatePicker!

@IBAction func displayDay(sender: AnyObject) {
    var chosenDate = self.datepicker.date

    println(chosenDate)

I've following date selected date. enter image description here

And click on the button underneath datepicker. I get following line in output

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

Can somebody tell me.what's wrong with output?

Eric Aya
  • 69,473
  • 35
  • 181
  • 253
MFarooqi
  • 1,004
  • 5
  • 12
  • 26

4 Answers4

10

This is fine because the date picker uses its local time but it stores UTC time. It means your local time offset is -5h. You can do as follow to extract the right date and time from it:

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

println(chosenDate.localizedDescription)

Swift 3 or later

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

Date().localizedDescription  // "Monday, October 16, 2017 at 2:24:11 AM Brasilia Summer Time"
Leo Dabus
  • 229,809
  • 59
  • 489
  • 571
2

Swift 3.0 - If You want to get a result in date format then use the following code.

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)
AtulParmar
  • 4,358
  • 1
  • 24
  • 45
1

Use this method to get correct 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
}
Sandeep Yadav
  • 114
  • 2
  • 6
-1

Swift 5

let yourLocalDate = Date().description(with: .current)
Roland Lariotte
  • 2,606
  • 1
  • 16
  • 40