Datepicker picks wrong date

前端 未结 4 988
北荒
北荒 2021-01-05 16:53

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 datepic         


        
相关标签:
4条回答
  • 2021-01-05 17:43

    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"
    
    0 讨论(0)
  • 2021-01-05 17:55

    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
    }
    
    0 讨论(0)
  • 2021-01-05 17:56

    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)
    
    0 讨论(0)
  • 2021-01-05 17:56

    Swift 5

    let yourLocalDate = Date().description(with: .current)
    
    0 讨论(0)
提交回复
热议问题