странное поведение uidatepicker - не установка даты и неправильная дата выбора - PullRequest
1 голос
/ 25 ноября 2010

У меня несколько странных проблем с UIDatePicker.Я проверил форумы и мне не повезло с предоставленными ответами.

Скажите, что я выбрал дату, 20/11/2010 EN_AUS localeКогда я NSLog это дата собственности 2010-11-19 13:00:00 +0000.Но когда я форматирую ее и отображаю в метке, она выглядит правильно, т.е.последняя выбранная дата.Но этого просто не происходит, все равно отображается текущая дата.

Я перечислил важный код ниже, любой совет приветствуется:)

// 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];

Ответы [ 3 ]

2 голосов
/ 25 ноября 2010

В настройке даты и времени в Apple есть ошибка, когда установлен часовой пояс телефона. Это было во всех версиях телефона с момента его выпуска, и мне было очень больно, где я живу (Новая Зеландия с +12 / + 13 по Гринвичу, что, кажется, усиливает проблему). Вы можете воспроизвести проблему в любом месте, где введены дата / время, например, поле дня рождения контакта iphone.

В некоторых местах я читал, что этот фрагмент кода иногда решает проблему:

datePicker.timeZone = [NSTimeZone localTimeZone];

См. этот ответ или этот для более подробной информации.

1 голос
/ 25 ноября 2010

Прежде всего, обратите внимание, что 2010-11-19 13:00:00 +0000 в UTC, поэтому дата, отформатированная для EN_AUS, будет впереди на 11 часов, поэтому вы видите 20/11/2010 при форматировании с использованием локали.Так что это совсем не проблема, и это правильное поведение.

Я не вижу проблем с вашей строкой setDate:animated:, поэтому я хотел бы убедиться, что self.appDelegate и self.datePicker на самом деле не нольчуть выше этой линии.

0 голосов
/ 29 декабря 2017

Используйте этот метод, чтобы получить правильную дату:

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

}

...