Перечисление предустановок форматов даты/времени, используемых в пользовательском интерфейсе и слоях экспорта ProjectForge. Определяет 16 различных уровней форматирования — от простой даты без года (DATE_WITHOUT_YEAR) до полных временных меток ISO 8601 (ISO_TIMESTAMP_MILLIS). Служит декларативным каталогом форматов — фактические строки шаблонов форматов разрешаются во время выполнения с помощью DateHelper или настроек локали пользователя, что обеспечивает форматирование дат с учётом локали без жёстко заданных строк шаблонов.
Категории форматов
Форматы только даты
| Константа перечисления | Пример шаблона | Сценарий использования |
DATE_WITHOUT_YEAR | dd.MM. / MM/dd / dd/MM | Дни рождения без года, списки день-месяц |
DATE | dd.MM.yyyy / MM/dd/yyyy | Общее отображение даты, поля даты в формах |
DATE_WITH_DAY_NAME | E, dd.MM.yyyy | Представления календаря, страницы планирования с днём недели |
DATE_SHORT | dd.MM.yy / MM/dd/yy | Экспорт в Excel, компактные представления списков |
ISO_DATE | yyyy-MM-dd | Запросы к БД, ответы API, обмен данными |
Форматы даты и времени
| Константа перечисления | Точность | Сценарий использования |
DATE_TIME_SHORT_SECONDS | DATE_SHORT + HH:mm:ss | Компактные логи, записи аудита |
DATE_TIME_SHORT_MINUTES | DATE_SHORT + HH:mm | Время событий календаря, расписание встреч |
DATE_TIME_MILLIS | DATE + HH:mm:ss.SSS | Точные временные метки с миллисекундами |
DATE_TIME_SECONDS | DATE + HH:mm:ss | Общее отображение временных меток, логи аудита |
DATE_TIME_MINUTES | DATE + HH:mm | Записи табеля учёта времени, отслеживание времени проектов |
Форматы только времени
| Константа перечисления | Шаблон | Сценарий использования |
TIME_OF_DAY_SECONDS | HH:mm:ss | Отображение длительности, представления в стиле секундомера |
TIME_OF_DAY_MINUTES | HH:mm | Ввод времени, время встреч, часы работы |
Форматы временных меток ISO 8601
| Константа перечисления | Шаблон | Сценарий использования |
ISO_TIMESTAMP_MILLIS | yyyy-MM-dd HH:mm:ss.SSS | Высокоточное логирование, столбцы аудита БД |
ISO_TIMESTAMP_SECONDS | yyyy-MM-dd HH:mm:ss | Ответы API, сериализация JSON, конечные точки REST |
ISO_TIMESTAMP_MINUTES | yyyy-MM-dd HH:mm | Экспорт календаря (iCal), системы планирования |
Специальный формат
| Константа перечисления | Шаблон | Сценарий использования |
DAY_OF_WEEK_SHORT | EE (Пн, Вт, ...) | Заголовки недель в представлениях календаря, обзор недели в табеле |
Учёт локали
Комментарии Javadoc для DATE и DATE_WITHOUT_YEAR показывают несколько примеров шаблонов ("dd.MM.", "MM/dd", "dd/MM"), что указывает на то, что эти константы перечисления представляют намерение формата, а не фиксированные шаблоны. Фактическая строка шаблона разрешается с помощью DateHelper на основе локали пользователя:
- Немецкая локаль →
dd.MM.yyyy
- Американская локаль →
MM/dd/yyyy
- Британская локаль →
dd/MM/yyyy
Это критически важная архитектурная особенность для международной пользовательской базы 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). Такое разделение позволяет:
- Компонентам пользовательского интерфейса предлагать выпадающий список всех доступных форматов (итерация по перечислению)
- Бизнес-логике ссылаться на форматы по семантическому имени, а не по строке шаблона
- Централизованному разрешению локали в DateHelper без дублирования логики форматирования в перечислении
- Сериализации предпочтений формата (например, предпочтительный формат даты пользователя, хранящийся как имя перечисления в базе данных)
Форматы временных меток ISO используют пробел в качестве разделителя (yyyy-MM-dd HH:mm:ss), а не стандартный разделитель ISO 8601 T (yyyy-MM-ddTHH:mm:ss). Хотя это распространено в контексте баз данных и отображения, технически это не строгий ISO 8601. Названия форматов предполагают соответствие ISO, но фактические шаблоны являются «ISO-подобными».
16 констант формата охватывают широкий диапазон от «без года» до «точность до миллисекунды». Такая детализация отражает разнообразные сценарии использования ProjectForge: управление табелями (точность до минут), финансовые отчёты (точность до дней), аудиторские журналы (точность до миллисекунд), представления календаря (день недели) и отслеживание миграции базы данных (временные метки ISO). Каждый формат служит определённым требованиям пользовательского опыта или данных.