Я работал над функцией совместного использования данных проекта, которая сильно зависела от значений / результатов, введенных заранее, когда я столкнулся с той же проблемой. Я реализовал небольшой обходной путь для сохранения в базе данных правильного времени и даты в формате 24 часа.
Решение очень простое
Сначала я получаю локальную дату с устройства:
NSDate* now = [NSDate date];
Второй шаг - создать NSDateFormatter
с языковым стандартом США независимо от языкового стандарта системы, чтобы убедиться, что «PM» будет «PM»:
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]];
Затем я получаю дату (год, месяц, день) в строку:
[formatter setDateFormat:@"yyyy-MM-dd"];
NSString *date = [formatter stringFromDate:now];
В следующей части я получу часы, минуты и секунды:
[formatter setDateFormat:@"hh"];
NSString *hours = [formatter stringFromDate:now];
[formatter setDateFormat:@"mm"];
NSString *minutes = [formatter stringFromDate:now];
[formatter setDateFormat:@"ss"];
NSString *seconds = [formatter stringFromDate:now];
Далее я получаю часть дня:
[formatter setDateFormat:@"a"];
NSString *partOfDay = [formatter stringFromDate:now];
Затем следует логика: если часть дня - вечера, но часы меньше 12, мы просто должны это исправить. В коде:
if([partOfDay isEqualToString:@"PM"] && [hours intValue] < 12) {
hours = [[NSString alloc] initWithFormat:@"%i", ([hours intValue] + 12)];
}
После этой модификации мы готовы соединить строку, чтобы дата и время были готовы для сохранения в SQL:
NSString *sqlDateTime = [[NSString alloc] initWithFormat:@"%@ %@:%@:%@", date, hours, minutes, seconds];
Вот и все, что нужно сделать. И теперь мы можем только надеяться, что Apple собирается исправить эту ошибку, чтобы она работала так, как она должна быть.
Надеюсь, это поможет.