Почему делает парсинг '23:00' с SimpleDateFormat (“hh:mm aa”), возвращают 11:00?

Если у Вас будут запросы, которые будут часто использовать относительно статический набор столбцов, создавая единственный закрывающий индекс, который включает их всех, то улучшит производительность существенно.

Путем помещения нескольких столбцов в индекс, оптимизатор должен будет только получить доступ к таблице непосредственно, если столбец не находится в индексе. Я использую их много в организации хранилищ данных. Оборотная сторона - то, что выполнение этого может стоить большого количества издержек, особенно если данные очень энергозависимы.

индексы Создания на отдельных столбцах полезно для операций поиска, часто находимых в системах OLTP.

необходимо спросить себя, почему Вы индексируете столбцы и как они будут использоваться. Выполните некоторые планы запросов и посмотрите, когда к ним получат доступ. Индексная настройка является таким же количеством инстинкта как наука.

11
задан Evan Kroske 21 December 2012 в 14:15
поделиться

6 ответов

Вы должны получить исключение, поскольку «23:00 PM» не является допустимой строкой, но функция даты / времени Java по умолчанию снисходительна при обработке даты

Логика такова, что 23:00 PM - это 12 часов после 23:00 PM, то есть 11:00 следующего дня. Вы также увидите, что «31 апреля» обрабатывается как «1 мая» (через день после 30 апреля).

Если вам не нужно такое поведение, установите для свойства lenient значение false в SimpleDateFormat, используя DateFormat # setLenient (boolean) , и вы получите исключение при передаче недопустимой даты / времени.

22
ответ дан 3 December 2019 в 00:46
поделиться

Если вы будете анализировать 24-часовое время, вы хотите использовать формат «ЧЧ: мм аа».

public static void main(String[] args) throws ParseException {
    SimpleDateFormat df = new SimpleDateFormat("HH:mm aa");
    final Date date = df.parse("23:00 PM");
    System.out.println("date = " + df.format(date));
}

output

date = 23:00 PM
17
ответ дан 3 December 2019 в 00:46
поделиться

Вот параметры форматирования, указанные в javadoc

H     Hour in day (0-23)    
k   Hour in day (1-24)  
K   Hour in am/pm (0-11)    
h   Hour in am/pm (1-12) 

Обратите внимание, что «h» соответствует часам 1-12. Если вы хотите обработать 1-24, попробуйте «k». для 0–23 попробуйте «H». Но я бы не ожидал достоверных результатов, если вы вводите невозможные данные.

4
ответ дан 3 December 2019 в 00:46
поделиться

23:00 можно считать 11:00 следующего дня . Javascript и PHP работают примерно так же, но я не могу говорить о Java.

2
ответ дан 3 December 2019 в 00:46
поделиться

Have вы пробовали ЧЧ: мм аа ?

ЧЧ для 24 часов, а чч для 12.

15
ответ дан 3 December 2019 в 00:46
поделиться

Я предполагаю, что он делает что-то вроде:

hours = hours % 12;

, чтобы гарантировать, что часы идут. правильный диапазон.

1
ответ дан 3 December 2019 в 00:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: