的UIDatePicker奇怪的行为 - 不设定日期和错误的日期被选中(uidatepicker s

2019-09-29 02:32发布

我在用的UIDatePicker几个奇怪的问题。 我检查了论坛,我还没有与提供的答案,运气好的话。

说我选了一个日期,20/11/2010 EN_AUS区域。 当我的NSLog它的日期属性2010-11-19 13:00:00 +0000。 但是,当我在一个标签格式,并显示它似乎是正确的,即20/11/2010?

接下来的时间,使用户进入该视图中的UIDatePicker应自动在最后选定的日期设置我保存这个日期。 但它只是没有发生,但它仍然显示当前日期。

我在下面列出的重要代码,任何建议表示赞赏:)

// setting up the uiDatePicker  
NSLocale *ozLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_AUS"];
self.datePicker.calendar = [NSCalendar autoupdatingCurrentCalendar];
[NSTimeZone setDefaultTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:39600]]; // Melbourne time zone
[self.datePicker setLocale:ozLocale];
self.datePicker.timeZone = [NSTimeZone localTimeZone];
[ozLocale release];

// displaying the date from the uidatePicker
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterShortStyle];
self.dateLabel.text = [dateFormatter stringFromDate:self.datePicker.date];
[dateFormatter release];


// In viewWillAppear I set the uiDatePicker. lastDatePicked has the value of 2010-11-19 13:00:00 +0000 at this point
[self.datePicker setDate:self.appDelegate.lastDatePicked animated:FALSE];

Answer 1:

首先,请注意2010-11-19 13:00:00 +0000是UTC这样格式化EN_AUS日期将会以11小时提前这就是为什么你看到20/11/2010使用格式化时语言环境。 所以这是不是在所有的问题,这是正确的行为。

我看你没问题setDate:animated:行,所以我将确保self.appDelegateself.datePicker实际上是非零略高于该行。



Answer 2:

有在苹果的日期时间选择器中的错误,当手机的时区已设置。 它已经在手机中的所有版本,因为它被释放,它是一个真正的痛苦,对我来说我住的地方(新西兰具有+ 12 / + 13 GMT,这似乎放大的问题)。 你可以在任何地方重现该问题的日期/时间输入,例如iPhone的联系人生日字段。

我读过一些地方认为这段代码有时能解决问题:

datePicker.timeZone = [NSTimeZone localTimeZone];

见这个答案还是这一块了解更多详情..



Answer 3:

使用这种方法来获得正确的日期:

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

}



文章来源: uidatepicker strange behaviour - not setting date and wrong date being selected