日期选择器选择了错误的日期
Datepicker picks wrong date
我正在将日期转换为日期,但如果我只是在日期选择器中打印当前选定的日期,我会得到错误的时间和日期。
@IBOutlet weak var datepicker: UIDatePicker!
@IBAction func displayDay(sender: AnyObject) {
var chosenDate = self.datepicker.date
println(chosenDate)
我已关注所选日期。
然后单击日期选择器下方的按钮。
我在输出中得到以下行
2015-01-11 20:17:37 +0000
有人能告诉我 me.what 的输出有问题吗?
这很好,因为日期选择器使用本地时间但它存储 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"
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)
使用此方法获取正确的日期:
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 5
let yourLocalDate = Date().description(with: .current)
我正在将日期转换为日期,但如果我只是在日期选择器中打印当前选定的日期,我会得到错误的时间和日期。
@IBOutlet weak var datepicker: UIDatePicker!
@IBAction func displayDay(sender: AnyObject) {
var chosenDate = self.datepicker.date
println(chosenDate)
我已关注所选日期。
然后单击日期选择器下方的按钮。 我在输出中得到以下行
2015-01-11 20:17:37 +0000
有人能告诉我 me.what 的输出有问题吗?
这很好,因为日期选择器使用本地时间但它存储 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"
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)
使用此方法获取正确的日期:
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 5
let yourLocalDate = Date().description(with: .current)