Skip to content

Commit fcd9fba

Browse files
authored
Merge pull request #841 from quickfix-j/leapsecond
check for leapsecond in `UTCTimestampConverter`
2 parents e78c740 + aafa745 commit fcd9fba

File tree

3 files changed

+24
-2
lines changed

3 files changed

+24
-2
lines changed

quickfixj-base/src/main/java/quickfix/field/converter/UtcTimestampConverter.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,10 @@ public static LocalDateTime convertToLocalDateTime(String value) throws FieldCon
151151
int h = parseInt(value, 9, 2);
152152
int m = parseInt(value, 12, 2);
153153
int s = parseInt(value, 15, 2);
154+
if (s == 60) { // leap second
155+
s = 59;
156+
ns = 999999999;
157+
}
154158
try {
155159
return LocalDateTime.of(yy, mm, dd, h, m, s, ns);
156160
} catch (DateTimeException e) {

quickfixj-base/src/test/java/quickfix/FieldConvertersTest.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -586,4 +586,24 @@ public void shouldFailToConvertFromStringToCharArrayWhenNoCharactersPresent() th
586586

587587
CharArrayConverter.convert("");
588588
}
589+
590+
@Test
591+
public void testConvertToLocalDateTimeLeapSecond() throws Exception {
592+
LocalDateTime dateTime = UtcTimestampConverter.convertToLocalDateTime("19981231-23:59:60");
593+
assertLocalDateTimeFieldsLeapSecond(dateTime);
594+
595+
dateTime = UtcTimestampConverter.convertToLocalDateTime("19981231-23:59:60.123456789012");
596+
assertLocalDateTimeFieldsLeapSecond(dateTime);
597+
}
598+
599+
private void assertLocalDateTimeFieldsLeapSecond(LocalDateTime dateTime) {
600+
assertEquals(23, dateTime.getHour());
601+
assertEquals(59, dateTime.getMinute());
602+
assertEquals(59, dateTime.getSecond());
603+
assertEquals(1998, dateTime.getYear());
604+
assertEquals(12, dateTime.getMonthValue());
605+
assertEquals(31, dateTime.getDayOfMonth());
606+
assertEquals(999999999, dateTime.getNano());
607+
}
608+
589609
}

quickfixj-base/src/test/java/quickfix/FieldMapTest.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66
import static org.junit.Assert.assertTrue;
77

88
import java.math.BigDecimal;
9-
import java.time.LocalDateTime;
10-
import java.time.ZoneOffset;
119
import java.util.Iterator;
1210
import java.util.Optional;
1311

0 commit comments

Comments
 (0)