Ваадин и Атмосфера на WildFly 13

Это просто часть ужасающего беспорядка, который является API дат / времени Java. Перечислить, что с ним не так, займет очень много времени (и я уверен, что не знаю половины проблем). Разумеется, работа с датами и временем сложна, но все равно.

Сделайте себе одолжение и используйте Joda Time вместо, или, возможно, JSR-310 .

EDIT: Что касается причин, почему, как отмечено в других ответах, это может быть связано с старыми API-интерфейсами C или просто с общим чувством начала всего от 0 ... за исключением того, что дни начинаются с 1 , конечно. Я сомневаюсь, что кто-то, кто не был в оригинальной команде по внедрению, действительно мог объяснить причины, - но опять же я настоятельно призывал читателей не беспокоиться о том, почему были приняты плохие решения, чтобы посмотреть на всю гамму гадости в java.util.Calendar и найти что-то лучшее.

Одна точка, которая является в пользу использования индексов на основе 0, состоит в том, что она облегчает такие вещи, как «массивы имен»:

// I "know" there are 12 months
String[] monthNames = new String[12]; // and populate...
String name = monthNames[calendar.get(Calendar.MONTH)];

Конечно, это не удается, как только вы получите календарь с 13 месяцами ... но, по крайней мере, указанный размер - это количество ожидаемых месяцев.

Это isn ' t a хорошая причина, но это причина ...

EDIT: В качестве комментариев типа запросов есть некоторые идеи о том, что я считаю неправильным Дата / Календарь:

  • Удивительные базы (1900 как база года в дате, по общему признанию, для устаревших конструкторов, 0 в качестве базы месяца в обоих)
  • Возможность использования - с использованием неизменяемых типов делает намного проще работать с тем, что действительно эффективно значения
  • Недостаточный набор типов: приятно иметь Date и Calendar как разные вещи, но отсутствует разделение «локальных» и «зональных» значений, а также дата / время и дата против времени
  • API, который приводит к уродливому коду с магическими константами вместо явно названных методов
  • API, о котором очень сложно рассуждать - все дело о том, когда вещи пересчитываются и т. д.
  • Использование конструкторов без параметров по умолчанию для «сейчас», что приводит к жесткому тестированию кода
  • Реализация Date.toString(), которая всегда использует локальный часовой пояс системы (это путают многие Stack Переполнение пользователей до сих пор)

0
задан Alexandros Kotsiras 13 July 2018 в 09:08
поделиться