EN · DE · RU · FR · ES

#1880 : DateFormatType.java

projectforge-common/src/main/java/org/projectforge/common/DateFormatType.java Enum Java — package org.projectforge.common, projectforge-common/src/main/java/org/projectforge/common/DateFormatType.java 99 lignes · 20 code · 76 commentaires · 3 vides
Énumération des préréglages de format de date/heure utilisés dans l'interface utilisateur et les couches d'exportation de ProjectForge. Définit 16 niveaux de format distincts, allant du simple format date uniquement (DATE_WITHOUT_YEAR) aux horodatages ISO 8601 complets (ISO_TIMESTAMP_MILLIS). Sert de catalogue de formats déclaratif — les chaînes de format réelles sont résolues à l'exécution par DateHelper ou les paramètres régionaux de l'utilisateur, permettant un formatage de date sensible à la locale sans chaînes de format codées en dur.

Architecture

Catégories de formats

Formats date uniquement

Constante d'énumérationExemple de motifCas d'utilisation
DATE_WITHOUT_YEARjj.MM. / MM/jj / jj/MMAnniversaires affichés sans année, listes jour-mois
DATEjj.MM.aaaa / MM/jj/aaaaAffichage général des dates, champs de date de formulaire
DATE_WITH_DAY_NAMEE, jj.MM.aaaaVues calendrier, pages de planification montrant le jour de la semaine
DATE_SHORTjj.MM.aa / MM/jj/aaExportations Excel, vues de liste compactes
ISO_DATEaaaa-MM-jjRequêtes base de données, réponses API, échange de données

Formats date-heure

Constante d'énumérationPrécisionCas d'utilisation
DATE_TIME_SHORT_SECONDSDATE_SHORT + HH:mm:ssJournaux compacts, entrées de piste d'audit
DATE_TIME_SHORT_MINUTESDATE_SHORT + HH:mmHoraires d'événements calendrier, réunions planifiées
DATE_TIME_MILLISDATE + HH:mm:ss.SSSHorodatages précis avec millisecondes
DATE_TIME_SECONDSDATE + HH:mm:ssAffichage général des horodatages, journaux d'audit
DATE_TIME_MINUTESDATE + HH:mmSaisies de feuilles de temps, suivi du temps projet

Formats heure uniquement

Constante d'énumérationMotifCas d'utilisation
TIME_OF_DAY_SECONDSHH:mm:ssAffichages de durée, vues style chronomètre
TIME_OF_DAY_MINUTESHH:mmSaisies d'heure, heures de réunion, heures d'ouverture

Formats d'horodatage ISO 8601

Constante d'énumérationMotifCas d'utilisation
ISO_TIMESTAMP_MILLISaaaa-MM-jj HH:mm:ss.SSSJournalisation haute précision, colonnes d'audit base de données
ISO_TIMESTAMP_SECONDSaaaa-MM-jj HH:mm:ssRéponses API, sérialisation JSON, points de terminaison REST
ISO_TIMESTAMP_MINUTESaaaa-MM-jj HH:mmExport calendrier (iCal), systèmes de planification

Format spécial

Constante d'énumérationMotifCas d'utilisation
DAY_OF_WEEK_SHORTEE (lun., mar., ...)En-têtes de semaine dans les vues calendrier, aperçu hebdomadaire des feuilles de temps

Sensibilité à la locale

Les commentaires Javadoc pour DATE et DATE_WITHOUT_YEAR montrent plusieurs exemples de motifs ("jj.MM.", "MM/jj", "jj/MM"), indiquant que ces constantes d'énumération représentent l'intention de format plutôt que des motifs fixes. La chaîne de format réelle est résolue par DateHelper en fonction de la locale de l'utilisateur :

Il s'agit d'une caractéristique de conception essentielle pour la base d'utilisateurs internationaux de ProjectForge.

Notation d'exportation Excel

Le Javadoc de la constante DATE_SHORT inclut une notation spécifique à Excel : "DD.MM.YY", "MM/DD/YY", "DD/MM/YY". Cela suggère que les constantes DateFormatType sont également utilisées par le module d'exportation Excel (org.projectforge.business.excel) qui mappe ces valeurs d'énumération aux chaînes de format de cellule Excel — différentes des motifs SimpleDateFormat de Java (le mois est MM dans Excel vs MM en Java, mais des différences de casse existent).

Relation avec DateHelper

Bien que ce fichier définisse uniquement les constantes d'énumération, la logique de résolution de format réelle réside dans DateHelper (dans le même package). DateHelper contient probablement une méthode getFormat(DateFormatType, Locale) ou similaire qui mappe chaque constante d'énumération à une instance DateFormat ou SimpleDateFormat spécifique à la locale.

Motif de conception : Énumération comme catalogue déclaratif

Cette énumération suit un motif où l'énumération sert de catalogue déclaratif des options disponibles, tandis que le comportement réel est implémenté ailleurs (DateHelper). Cette séparation permet :

Les formats d'horodatage ISO utilisent un séparateur espace (aaaa-MM-jj HH:mm:ss) plutôt que le séparateur T standard ISO 8601 (aaaa-MM-jjTHH:mm:ss). Bien que courant dans les contextes de base de données et d'affichage, ce n'est techniquement pas strictement ISO 8601. Les noms de format suggèrent une conformité ISO mais les motifs réels sont « de type ISO ».
Les 16 constantes de format couvrent une gamme complète allant de « sans année » à « précision milliseconde ». Cette granularité reflète les divers cas d'utilisation de ProjectForge : gestion des feuilles de temps (précision minute), rapports financiers (précision jour), pistes d'audit (précision milliseconde), vues calendrier (jour de la semaine) et suivi des migrations de base de données (horodatages ISO). Chaque format répond à un besoin UX ou de données spécifique.

Historique Git

868d6abb7 2025 -> 2026
63081666f En-têtes de fichiers source : 2024 -> 2025.
b6092df09 Copyright 2023 -> 2024
ab45d51fa Copyright 2001-2022 -> 2001-2023.
5f7ef41b8 Copyright 2021 -> 2022
ceb63e8a1 En-tête de code source : (C) 2001-2021.
7c79f1922 Copyright de l'en-tête source -> 2020.
dd5ca38ac Mise à jour ou création du copyright de tous les en-têtes de fichiers Java.