Class FixedDateFormat

java.lang.Object
org.apache.logging.log4j.core.util.datetime.FixedDateFormat

public class FixedDateFormat extends 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 Details

    • NONE

      private static final char NONE
      See Also:
    • fixedFormat

      private final FixedDateFormat.FixedFormat fixedFormat
    • timeZone

      private final TimeZone timeZone
    • length

      private final int length
    • secondFractionDigits

      private final int secondFractionDigits
    • fastDateFormat

      private final FastDateFormat fastDateFormat
    • timeSeparatorChar

      private final char timeSeparatorChar
    • millisSeparatorChar

      private final char millisSeparatorChar
    • timeSeparatorLength

      private final int timeSeparatorLength
    • millisSeparatorLength

      private final int millisSeparatorLength
    • fixedTimeZoneFormat

      private final FixedDateFormat.FixedTimeZoneFormat fixedTimeZoneFormat
    • 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 Details

    • FixedDateFormat

      FixedDateFormat(FixedDateFormat.FixedFormat fixedFormat, 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, 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 Details

    • createIfSupported

      public static FixedDateFormat createIfSupported(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, 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 String getFormat()
      Returns the full pattern of the selected fixed format.
      Returns:
      the full date-time pattern
    • getTimeZone

      public 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 String formatInstant(Instant instant)
    • formatInstant

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

      private int digitsLessThanThree()
    • format

      public 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.