69 benchmarks · 10 candidates · ns/op, lower is better · 25.0.4 · 13th Gen Intel(R) Core(TM) i9-13900H · 2026-09-21
Summary
ITU against JDK java.time, one row per operation. Spans cover the inputs of that operation; the speed-up is JDK java.time time divided by ITU time, per input. The other candidates are in the sections below.
OffsetDateTime.parse, a DateTimeFormatterBuilder layout with optional parts for lenient parsing, parse-and-catch for isValid, Duration.parse / toString
Long.parseLong / Long.toString on the epoch count - the number an API would carry instead of a date-time string. Not a parser; a reference for the “epoch is faster” argument
ITU.parseEpochMilli on the same epoch-millis text, into the same DateTime the string parsers produce - the epoch argument measured to a temporal value, not to a long
ITU.parseEpochMilli over a char[] window into a reusable MutableDateTimeBuffer - the zero-allocation path for epoch text, the like-for-like of the char[] buffer row
isValid strict RFC-3339 validity check, valid and invalid inputs
ITUJDK java.time
Input
ITU
JDK java.time
2023-01-01T23:38:34.987654321+06:00
12.9 ±0.2fastest0 B/op-60.5% vs baseline
559 ±11.343.22×1,592 B/opnew
3074-07-01T12:02
1.59 ±0.0fastest0 B/op-99.8% vs baseline
1,065 ±23.4669.26×1,640 B/opnew
3074-07-01T12:02:01Z
7.68 ±0.1fastest0 B/op-62.0% vs baseline
545 ±10.170.93×1,480 B/opnew
3074-07-01T12:02:01Zjunk
7.75 ±0.1fastest0 B/op-99.2% vs baseline
1,253 ±21.8161.73×2,176 B/opnew
3074-13-01T12:02:01Z
6.94 ±0.1fastest0 B/op-99.3% vs baseline
2,397 ±39.3345.41×3,596 B/opnew
5050-01-01T12:02:01.123Z
10.5 ±0.1fastest0 B/op-56.8% vs baseline
536 ±14.551.22×1,536 B/opnew
not-a-date
1.60 ±0.0fastest0 B/op-99.9% vs baseline
809 ±11.9506.43×1,040 B/opnew
Date-time formatting
formatSeconds · formatMillis · formatNanosone operation per row
ITUJDK java.timeEpoch millis
Operation
ITU
JDK java.time
Epoch millis
formatSeconds
15.9 ±0.21.81×136 B/op-0.1% vs baseline
100 ±1.411.40×256 B/opnew
8.80 ±0.1fastest56 B/opnew
formatMillis
19.0 ±0.21.65×144 B/op-0.4% vs baseline
115 ±2.610.01×256 B/opnew
11.5 ±0.7fastest56 B/opnew
formatNanos
33.4 ±0.61.91×160 B/op-0.0% vs baseline
115 ±1.76.59×264 B/opnew
17.5 ±0.5fastest64 B/opnew
Duration
parseDuration ISO-8601 duration
ITUJDK java.time
Input
ITU
JDK java.time
-P180DT23H27M19.193964536S
51.6 ±0.9fastest80 B/op+1.1% vs baseline
247 ±22.64.79×312 B/opnew
PT2H30M
24.7 ±0.4fastest80 B/op-0.1% vs baseline
134 ±3.05.45×264 B/opnew
formatDuration ISO-8601 duration
ITUITU (hours)JDK java.time
Input
ITU
ITU (hours)
JDK java.time
-P180DT23H27M19.193964536S
27.1 ±0.4fastest168 B/op-0.1% vs baseline
32.3 ±0.51.20×160 B/opnew
31.2 ±0.61.15×184 B/opnew
PT2H30M
13.8 ±0.31.40×144 B/op+1.3% vs baseline
12.8 ±0.21.29×144 B/opnew
9.87 ±0.1fastest88 B/opnew
Other
parseLenientToEpochSecond
ITU (char[] buffer)
Input
ITU (char[] buffer)
2023-01-01T23:38:34.987654321+06:00
17.6 ±0.3fastest0 B/opnew
3074-07-01T12:02:01Z
11.7 ±0.2fastest0 B/opnew
5050-01-01T12:02:01.123Z
13.3 ±0.2fastest0 B/opnew
ns/op per operation; ± is JMH’s 99.9% confidence interval over all measurement iterations. The small figure under each value is the ratio to the fastest candidate on that input.
Environment
Date2026-09-21T18:17:22+02:00Runitu-1.16.0JDK25.0.4 (OpenJDK 64-Bit Server VM 25.0.4+7-1-26.04-Ubuntu)JVM args-XX:+UnlockDiagnosticVMOptions -XX:+TieredCompilation -XX:+AlwaysPreTouchIterations2 fork(s), 3 × 1 s warmup, 10 × 1 s measurement (--thorough)CPU13th Gen Intel(R) Core(TM) i9-13900HOSUbuntu 26.04.1 LTSGit5490c17Harness floor0.54 ns/op - the JMH loop, state loads and Blackhole with no parsing at all; subtract it from a parse score for the parser's own cost
JMH 1.37. Each run records this in run.properties next to its results; library versions are read from the jar that ran, not from the pom.