Class FixedDateFormat


  • public class FixedDateFormat
    extends java.lang.Object
    Custom time formatter that trades flexibility for performance. This formatter only supports the date patterns defined in FixedDateFormat.FixedFormat. For any other date patterns use FastDateFormat.

    Related benchmarks: /log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/TimeFormatBenchmark.java and /log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ThreadsafeDateFormatBenchmark.java

    • Field Detail

      • timeZone

        private final java.util.TimeZone timeZone
      • length

        private final int length
      • secondFractionDigits

        private final int secondFractionDigits
      • timeSeparatorChar

        private final char timeSeparatorChar
      • millisSeparatorChar

        private final char millisSeparatorChar
      • timeSeparatorLength

        private final int timeSeparatorLength
      • millisSeparatorLength

        private final int millisSeparatorLength
      • midnightToday

        private volatile long midnightToday
      • midnightTomorrow

        private volatile long midnightTomorrow
      • dstOffsets

        private final int[] dstOffsets
      • cachedDate

        private char[] cachedDate
      • dateLength

        private int dateLength
      • TABLE

        static int[] TABLE
    • Constructor Detail

      • FixedDateFormat

        FixedDateFormat​(FixedDateFormat.FixedFormat fixedFormat,
                        java.util.TimeZone tz)
        Constructs a FixedDateFormat for the specified fixed format.

        Package protected for unit tests.

        Parameters:
        fixedFormat - the fixed format
        tz - time zone
      • FixedDateFormat

        FixedDateFormat​(FixedDateFormat.FixedFormat fixedFormat,
                        java.util.TimeZone tz,
                        int secondFractionDigits)
        Constructs a FixedDateFormat for the specified fixed format.

        Package protected for unit tests.

        Parameters:
        fixedFormat - the fixed format
        tz - time zone
        secondFractionDigits - the number of digits specifying the fraction of the second to show
    • Method Detail

      • createIfSupported

        public static FixedDateFormat createIfSupported​(java.lang.String... options)
      • create

        public static FixedDateFormat create​(FixedDateFormat.FixedFormat format)
        Returns a new FixedDateFormat object for the specified FixedFormat and a TimeZone.getDefault() TimeZone.
        Parameters:
        format - the format to use
        Returns:
        a new FixedDateFormat object
      • create

        public static FixedDateFormat create​(FixedDateFormat.FixedFormat format,
                                             java.util.TimeZone tz)
        Returns a new FixedDateFormat object for the specified FixedFormat and TimeZone.
        Parameters:
        format - the format to use
        tz - the time zone to use
        Returns:
        a new FixedDateFormat object
      • getFormat

        public java.lang.String getFormat()
        Returns the full pattern of the selected fixed format.
        Returns:
        the full date-time pattern
      • getTimeZone

        public java.util.TimeZone getTimeZone()
        Returns the time zone.
        Returns:
        the time zone
      • millisSinceMidnight

        public long millisSinceMidnight​(long currentTime)

        Returns the number of milliseconds since midnight in the time zone that this FixedDateFormat was constructed with for the specified currentTime.

        As a side effect, this method updates the cached formatted date and the cached date demarcation timestamps when the specified current time is outside the previously set demarcation timestamps for the start or end of the current day.

        Parameters:
        currentTime - the current time in millis since the epoch
        Returns:
        the number of milliseconds since midnight for the specified time
      • updateMidnightMillis

        private void updateMidnightMillis​(long now)
      • calcMidnightMillis

        private long calcMidnightMillis​(long time,
                                        int addDays)
      • updateDaylightSavingTime

        private void updateDaylightSavingTime()
      • updateCachedDate

        private void updateCachedDate​(long now)
      • formatInstant

        public java.lang.String formatInstant​(Instant instant)
      • formatInstant

        public int formatInstant​(Instant instant,
                                 char[] buffer,
                                 int startPos)
      • digitsLessThanThree

        private int digitsLessThanThree()
      • format

        public java.lang.String format​(long epochMillis)
      • format

        public int format​(long epochMillis,
                          char[] buffer,
                          int startPos)
      • writeDate

        private void writeDate​(char[] buffer,
                               int startPos)
      • writeTime

        private int writeTime​(int ms,
                              char[] buffer,
                              int pos)
      • writeTimeZone

        private int writeTimeZone​(long epochMillis,
                                  char[] buffer,
                                  int pos)
      • formatNanoOfMillisecond

        private int formatNanoOfMillisecond​(int nanoOfMillisecond,
                                            char[] buffer,
                                            int pos)
      • daylightSavingTime

        private int daylightSavingTime​(int hourOfDay)
      • isEquivalent

        public boolean isEquivalent​(long oldEpochSecond,
                                    int oldNanoOfSecond,
                                    long epochSecond,
                                    int nanoOfSecond)
        Returns true if the old and new date values will result in the same formatted output, false if results may differ.