EN · DE · RU · FR · ES

#1880: DateFormatType.java

projectforge-common/src/main/java/org/projectforge/common/DateFormatType.java Java enum — пакет org.projectforge.common, projectforge-common/src/main/java/org/projectforge/common/DateFormatType.java 99 строк · 20 кода · 76 комментариев · 3 пустых
Перечисление предустановок форматов даты/времени, используемых в пользовательском интерфейсе и слоях экспорта ProjectForge. Определяет 16 различных уровней форматирования — от простой даты без года (DATE_WITHOUT_YEAR) до полных временных меток ISO 8601 (ISO_TIMESTAMP_MILLIS). Служит декларативным каталогом форматов — фактические строки шаблонов форматов разрешаются во время выполнения с помощью DateHelper или настроек локали пользователя, что обеспечивает форматирование дат с учётом локали без жёстко заданных строк шаблонов.

Архитектура

Категории форматов

Форматы только даты

Константа перечисленияПример шаблонаСценарий использования
DATE_WITHOUT_YEARdd.MM. / MM/dd / dd/MMДни рождения без года, списки день-месяц
DATEdd.MM.yyyy / MM/dd/yyyyОбщее отображение даты, поля даты в формах
DATE_WITH_DAY_NAMEE, dd.MM.yyyyПредставления календаря, страницы планирования с днём недели
DATE_SHORTdd.MM.yy / MM/dd/yyЭкспорт в Excel, компактные представления списков
ISO_DATEyyyy-MM-ddЗапросы к БД, ответы API, обмен данными

Форматы даты и времени

Константа перечисленияТочностьСценарий использования
DATE_TIME_SHORT_SECONDSDATE_SHORT + HH:mm:ssКомпактные логи, записи аудита
DATE_TIME_SHORT_MINUTESDATE_SHORT + HH:mmВремя событий календаря, расписание встреч
DATE_TIME_MILLISDATE + HH:mm:ss.SSSТочные временные метки с миллисекундами
DATE_TIME_SECONDSDATE + HH:mm:ssОбщее отображение временных меток, логи аудита
DATE_TIME_MINUTESDATE + HH:mmЗаписи табеля учёта времени, отслеживание времени проектов

Форматы только времени

Константа перечисленияШаблонСценарий использования
TIME_OF_DAY_SECONDSHH:mm:ssОтображение длительности, представления в стиле секундомера
TIME_OF_DAY_MINUTESHH:mmВвод времени, время встреч, часы работы

Форматы временных меток ISO 8601

Константа перечисленияШаблонСценарий использования
ISO_TIMESTAMP_MILLISyyyy-MM-dd HH:mm:ss.SSSВысокоточное логирование, столбцы аудита БД
ISO_TIMESTAMP_SECONDSyyyy-MM-dd HH:mm:ssОтветы API, сериализация JSON, конечные точки REST
ISO_TIMESTAMP_MINUTESyyyy-MM-dd HH:mmЭкспорт календаря (iCal), системы планирования

Специальный формат

Константа перечисленияШаблонСценарий использования
DAY_OF_WEEK_SHORTEE (Пн, Вт, ...)Заголовки недель в представлениях календаря, обзор недели в табеле

Учёт локали

Комментарии Javadoc для DATE и DATE_WITHOUT_YEAR показывают несколько примеров шаблонов ("dd.MM.", "MM/dd", "dd/MM"), что указывает на то, что эти константы перечисления представляют намерение формата, а не фиксированные шаблоны. Фактическая строка шаблона разрешается с помощью DateHelper на основе локали пользователя:

Это критически важная архитектурная особенность для международной пользовательской базы ProjectForge.

Обозначение для экспорта в Excel

Javadoc константы DATE_SHORT включает обозначения, специфичные для Excel: "DD.MM.YY", "MM/DD/YY", "DD/MM/YY". Это предполагает, что константы DateFormatType также используются модулем экспорта в Excel (org.projectforge.business.excel), который сопоставляет эти значения перечисления со строками формата ячеек Excel — отличными от шаблонов Java SimpleDateFormat (месяц — MM в Excel против MM в Java, но существуют различия в регистре).

Взаимосвязь с DateHelper

Хотя этот файл определяет только константы перечисления, фактическая логика разрешения формата находится в DateHelper (в том же пакете). DateHelper, вероятно, содержит метод getFormat(DateFormatType, Locale) или аналогичный, который сопоставляет каждую константу перечисления с экземпляром DateFormat или SimpleDateFormat для конкретной локали.

Шаблон проектирования: перечисление как декларативный каталог

Это перечисление следует шаблону, в котором перечисление служит декларативным каталогом доступных опций, в то время как фактическое поведение реализуется в другом месте (DateHelper). Такое разделение позволяет:

Форматы временных меток ISO используют пробел в качестве разделителя (yyyy-MM-dd HH:mm:ss), а не стандартный разделитель ISO 8601 T (yyyy-MM-ddTHH:mm:ss). Хотя это распространено в контексте баз данных и отображения, технически это не строгий ISO 8601. Названия форматов предполагают соответствие ISO, но фактические шаблоны являются «ISO-подобными».
16 констант формата охватывают широкий диапазон от «без года» до «точность до миллисекунды». Такая детализация отражает разнообразные сценарии использования ProjectForge: управление табелями (точность до минут), финансовые отчёты (точность до дней), аудиторские журналы (точность до миллисекунд), представления календаря (день недели) и отслеживание миграции базы данных (временные метки ISO). Каждый формат служит определённым требованиям пользовательского опыта или данных.

История Git

868d6abb7 2025 -> 2026
63081666f Заголовки исходных файлов: 2024-> 2025.
b6092df09 Авторские права 2023 -> 2024
ab45d51fa Авторские права 2001-2022 -> 2001-2023.
5f7ef41b8 Авторские права 2021 -> 2022
ceb63e8a1 Заголовок исходного кода: (C) 2001-2021.
7c79f1922 Авторские права в заголовке исходника -> 2020.
dd5ca38ac Обновлены или созданы авторские права во всех заголовках java-файлов.