Datepicker选错了日期

问题描述 投票:2回答:3

我正在将日期转换为白天,但如果我只是println()在datepicker中当前选择的日期,我会得到错误的时间和错误的日期。

@IBOutlet weak var datepicker: UIDatePicker!

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

    println(chosenDate)

我已按照日期选择日期。

然后单击datepicker下面的按钮。我在输出中得到以下行

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

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

ios swift uidatepicker
3个回答
7
投票

这很好,因为日期选择器使用其本地时间,但它存储UTC时间。这意味着您当地的时间偏差为-5小时。您可以按照以下步骤从中提取正确的日期和时间:

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"

2
投票

Swift 3.0 - 如果您想获得日期格式的结果,请使用以下代码。

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)

1
投票

使用此方法获取正确的日期:

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
}
© www.soinside.com 2019 - 2024. All rights reserved.