1515package com .google .mu .time ;
1616
1717import static com .google .common .truth .Truth .assertThat ;
18+ import static com .google .common .truth .Truth .assertWithMessage ;
1819import static com .google .mu .time .DateTimeFormats .formatOf ;
1920import static org .junit .Assert .assertThrows ;
2021
2122import java .time .DateTimeException ;
23+ import java .time .DayOfWeek ;
2224import java .time .Instant ;
2325import java .time .LocalDate ;
2426import java .time .LocalDateTime ;
@@ -471,7 +473,28 @@ public void localTimeExamples(
471473 String example ) {
472474 DateTimeFormatter formatter = DateTimeFormats .formatOf (example );
473475 LocalTime time = LocalTime .parse (example , formatter );
474- assertThat (time .format (formatter )).isEqualTo (example );
476+ assertWithMessage ("Using format %s" , formatter ).that (time .format (formatter )).isEqualTo (example );
477+ }
478+
479+ @ Test
480+ @ SuppressWarnings ("DateTimeExampleStringCheck" )
481+ public void allZerosLocalTime (
482+ @ TestParameter ({
483+ "00:00:00" ,
484+ "00:00:00.0" ,
485+ "00:00:00.00" ,
486+ "00:00:00.000" ,
487+ "00:00:00.0000" ,
488+ "00:00:00.00000" ,
489+ "00:00:00.000000" ,
490+ "00:00:00.0000000" ,
491+ "00:00:00.00000000" ,
492+ "00:00:00.000000000" ,
493+ })
494+ String example ) {
495+ DateTimeFormatter formatter = DateTimeFormats .formatOf (example );
496+ LocalTime time = LocalTime .parse (example , formatter );
497+ assertWithMessage ("Using format %s" , formatter ).that (time .format (formatter )).isEqualTo ("00:00:00" );
475498 }
476499
477500 @ Test
@@ -486,6 +509,12 @@ public void localDateExamplesFromDifferentFormatters(
486509 assertThat (LocalDate .parse (example , DateTimeFormats .formatOf (example ))).isEqualTo (day );
487510 }
488511
512+ @ Test
513+ public void localDateWithWeekdayExamples () {
514+ ZonedDateTime date = DateTimeFormats .parseZonedDateTime ("Mon, 2007-12-31 00:00:00 America/New_York" );
515+ assertThat (date .getDayOfWeek ()).isEqualTo (DayOfWeek .MONDAY );
516+ }
517+
489518 @ Test
490519 public void zonedDateTimeExamplesFromDifferentFormatters (
491520 @ TestParameter ({
@@ -977,6 +1006,204 @@ public void typoInExample() {
9771006 DateTimeException .class , () -> formatOf ("<Febuary Wedenesday>, <2021/20/30>" ));
9781007 }
9791008
1009+ @ Test public void fuzzTests () {
1010+ assertLocalDate ("2005-04-27" , "yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2005-04-27" ));
1011+ assertLocalDate ("2004-10-27" , "yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2004-10-27" ));
1012+ assertLocalDate ("1993/07/05" , "yyyy/MM/dd" ).isEqualTo (LocalDate .parse ("1993-07-05" ));
1013+ assertLocalDate ("Tue, 2016-09-20" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2016-09-20" ));
1014+ assertLocalDate ("2009/09/23" , "yyyy/MM/dd" ).isEqualTo (LocalDate .parse ("2009-09-23" ));
1015+ assertLocalDate ("2027-04-02" , "yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2027-04-02" ));
1016+ assertZonedDateTime ("1994-08-03 19:32:42 UTC" , "yyyy-MM-dd HH:mm:ss zzz" )
1017+ .isEqualTo (ZonedDateTime .parse ("1994-08-03T19:32:42+00:00[UTC]" ));
1018+ assertLocalDate ("Thu, 2011-06-09" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2011-06-09" ));
1019+ assertLocalDate ("2021-01-11" , "yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2021-01-11" ));
1020+ assertZonedDateTime ("2000-04-28 19:32 UTC" , "yyyy-MM-dd HH:mm zzz" )
1021+ .isEqualTo (ZonedDateTime .parse ("2000-04-28T19:32:00+00:00[UTC]" ));
1022+ assertLocalDate ("2018-08-13" , "yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2018-08-13" ));
1023+ assertLocalDate ("Mon, 2022-07-25" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2022-07-25" ));
1024+ assertLocalDate ("Mon, 2019-09-09" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2019-09-09" ));
1025+ assertLocalDate ("2024-08-04" , "yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2024-08-04" ));
1026+ assertLocalDate ("2027/11/13" , "yyyy/MM/dd" ).isEqualTo (LocalDate .parse ("2027-11-13" ));
1027+ assertLocalDate ("2008-06-03" , "yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2008-06-03" ));
1028+ assertLocalDate ("Wed, 2014-01-08" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2014-01-08" ));
1029+ assertLocalDate ("Wed, 2004-03-24" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2004-03-24" ));
1030+ assertLocalDate ("2023/06/04" , "yyyy/MM/dd" ).isEqualTo (LocalDate .parse ("2023-06-04" ));
1031+ assertLocalDate ("2023-12-18" , "yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2023-12-18" ));
1032+ assertLocalDate ("1998-05-17" , "yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("1998-05-17" ));
1033+ assertLocalDate ("Fri, 2023-05-05" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2023-05-05" ));
1034+ assertLocalDate ("Wed, 1991-11-27" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("1991-11-27" ));
1035+ assertZonedDateTime ("Sat, 2027-06-05 19:32 UTC" , "E, yyyy-MM-dd HH:mm zzz" )
1036+ .isEqualTo (ZonedDateTime .parse ("2027-06-05T19:32:00+00:00[UTC]" ));
1037+ assertLocalDate ("2002/03/04" , "yyyy/MM/dd" ).isEqualTo (LocalDate .parse ("2002-03-04" ));
1038+ assertZonedDateTime ("2003-01-12 19:32 UTC" , "yyyy-MM-dd HH:mm zzz" )
1039+ .isEqualTo (ZonedDateTime .parse ("2003-01-12T19:32:00+00:00[UTC]" ));
1040+ assertLocalDate ("2020-06-11" , "yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2020-06-11" ));
1041+ assertLocalDate ("1991/08/20" , "yyyy/MM/dd" ).isEqualTo (LocalDate .parse ("1991-08-20" ));
1042+ assertLocalDate ("2015-03-23" , "yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2015-03-23" ));
1043+ assertLocalDate ("2019/01/25" , "yyyy/MM/dd" ).isEqualTo (LocalDate .parse ("2019-01-25" ));
1044+ assertLocalDate ("2005/05/14" , "yyyy/MM/dd" ).isEqualTo (LocalDate .parse ("2005-05-14" ));
1045+ assertZonedDateTime ("Sun, 2011-09-18 19:32:42 UTC" , "E, yyyy-MM-dd HH:mm:ss zzz" )
1046+ .isEqualTo (ZonedDateTime .parse ("2011-09-18T19:32:42+00:00[UTC]" ));
1047+ assertLocalDate ("1992/05/10" , "yyyy/MM/dd" ).isEqualTo (LocalDate .parse ("1992-05-10" ));
1048+ assertLocalDate ("Fri, 2027-12-03" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2027-12-03" ));
1049+ assertLocalDate ("Fri, 2020-05-15" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2020-05-15" ));
1050+ assertLocalDate ("Sun, 2020-10-25" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2020-10-25" ));
1051+ assertLocalDate ("1999/12/15" , "yyyy/MM/dd" ).isEqualTo (LocalDate .parse ("1999-12-15" ));
1052+ assertZonedDateTime ("Thu, 1997-02-06 19:32:42 UTC" , "E, yyyy-MM-dd HH:mm:ss zzz" )
1053+ .isEqualTo (ZonedDateTime .parse ("1997-02-06T19:32:42+00:00[UTC]" ));
1054+ assertLocalDate ("Thu, 2021-08-05" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2021-08-05" ));
1055+ assertLocalDate ("Wed, 2007-01-10" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2007-01-10" ));
1056+ assertLocalDate ("1998/11/17" , "yyyy/MM/dd" ).isEqualTo (LocalDate .parse ("1998-11-17" ));
1057+ assertLocalDate ("2026-08-27" , "yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2026-08-27" ));
1058+ assertLocalDate ("Tue, 2016-08-02" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2016-08-02" ));
1059+ assertLocalDate ("1991/07/24" , "yyyy/MM/dd" ).isEqualTo (LocalDate .parse ("1991-07-24" ));
1060+ assertLocalDate ("1994-06-06" , "yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("1994-06-06" ));
1061+ assertLocalDate ("2007/05/06" , "yyyy/MM/dd" ).isEqualTo (LocalDate .parse ("2007-05-06" ));
1062+ assertLocalDate ("2020/07/07" , "yyyy/MM/dd" ).isEqualTo (LocalDate .parse ("2020-07-07" ));
1063+ assertZonedDateTime ("2025-08-06 19:32:42.4 UTC" , "yyyy-MM-dd HH:mm:ss.S zzz" )
1064+ .isEqualTo (ZonedDateTime .parse ("2025-08-06T19:32:42.4+00:00[UTC]" ));
1065+ assertLocalDate ("Tue, 1992-08-04" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("1992-08-04" ));
1066+ assertLocalDate ("2014/01/20" , "yyyy/MM/dd" ).isEqualTo (LocalDate .parse ("2014-01-20" ));
1067+ assertLocalDate ("2028/03/09" , "yyyy/MM/dd" ).isEqualTo (LocalDate .parse ("2028-03-09" ));
1068+ assertZonedDateTime ("2003-09-08 19:32 UTC" , "yyyy-MM-dd HH:mm zzz" )
1069+ .isEqualTo (ZonedDateTime .parse ("2003-09-08T19:32:00+00:00[UTC]" ));
1070+ assertLocalDate ("Sat, 2020-04-11" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2020-04-11" ));
1071+ assertLocalDate ("2029-05-03" , "yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2029-05-03" ));
1072+ assertLocalDate ("2001/10/17" , "yyyy/MM/dd" ).isEqualTo (LocalDate .parse ("2001-10-17" ));
1073+ assertLocalDate ("2029/06/04" , "yyyy/MM/dd" ).isEqualTo (LocalDate .parse ("2029-06-04" ));
1074+ assertLocalDate ("Thu, 2023-03-16" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2023-03-16" ));
1075+ assertLocalDate ("2022/12/01" , "yyyy/MM/dd" ).isEqualTo (LocalDate .parse ("2022-12-01" ));
1076+ assertLocalDate ("Thu, 2024-08-01" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2024-08-01" ));
1077+ assertZonedDateTime ("2001-04-25 19:32:42.47 UTC" , "yyyy-MM-dd HH:mm:ss.SS zzz" )
1078+ .isEqualTo (ZonedDateTime .parse ("2001-04-25T19:32:42.47+00:00[UTC]" ));
1079+ assertLocalDate ("1997/02/28" , "yyyy/MM/dd" ).isEqualTo (LocalDate .parse ("1997-02-28" ));
1080+ assertLocalDate ("2014-01-17" , "yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2014-01-17" ));
1081+ assertLocalDate ("Thu, 2022-07-14" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2022-07-14" ));
1082+ assertLocalDate ("2013-05-26" , "yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2013-05-26" ));
1083+ assertLocalDate ("2026/07/14" , "yyyy/MM/dd" ).isEqualTo (LocalDate .parse ("2026-07-14" ));
1084+ assertLocalDate ("2003-01-11" , "yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2003-01-11" ));
1085+ assertZonedDateTime ("Mon, 2003-10-20 19:32 UTC" , "E, yyyy-MM-dd HH:mm zzz" )
1086+ .isEqualTo (ZonedDateTime .parse ("2003-10-20T19:32:00+00:00[UTC]" ));
1087+ assertLocalDate ("Sun, 2023-12-03" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2023-12-03" ));
1088+ assertLocalDate ("2007-12-07" , "yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2007-12-07" ));
1089+ assertLocalDate ("1993/08/09" , "yyyy/MM/dd" ).isEqualTo (LocalDate .parse ("1993-08-09" ));
1090+ assertLocalDate ("2000-03-09" , "yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2000-03-09" ));
1091+ assertLocalDate ("2003/08/12" , "yyyy/MM/dd" ).isEqualTo (LocalDate .parse ("2003-08-12" ));
1092+ assertLocalDate ("Sun, 1995-12-03" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("1995-12-03" ));
1093+ assertZonedDateTime ("Tue, 2014-08-05 19:32:42 UTC" , "E, yyyy-MM-dd HH:mm:ss zzz" )
1094+ .isEqualTo (ZonedDateTime .parse ("2014-08-05T19:32:42+00:00[UTC]" ));
1095+ assertLocalDate ("1998/05/05" , "yyyy/MM/dd" ).isEqualTo (LocalDate .parse ("1998-05-05" ));
1096+ assertLocalDate ("Tue, 2014-02-04" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2014-02-04" ));
1097+ assertLocalDate ("2017/06/28" , "yyyy/MM/dd" ).isEqualTo (LocalDate .parse ("2017-06-28" ));
1098+ assertLocalDate ("Fri, 2027-02-12" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2027-02-12" ));
1099+ assertLocalDate ("Wed, 2007-08-08" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2007-08-08" ));
1100+ assertLocalDate ("Sat, 2004-06-05" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2004-06-05" ));
1101+ assertLocalDate ("2009-04-17" , "yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2009-04-17" ));
1102+ assertLocalDate ("Wed, 2028-12-20" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2028-12-20" ));
1103+ assertZonedDateTime ("Fri, 1999-01-22 19:32 UTC" , "E, yyyy-MM-dd HH:mm zzz" )
1104+ .isEqualTo (ZonedDateTime .parse ("1999-01-22T19:32:00+00:00[UTC]" ));
1105+ assertLocalDate ("2010-05-23" , "yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2010-05-23" ));
1106+ assertLocalDate ("2012/02/18" , "yyyy/MM/dd" ).isEqualTo (LocalDate .parse ("2012-02-18" ));
1107+ assertLocalDate ("2028/05/12" , "yyyy/MM/dd" ).isEqualTo (LocalDate .parse ("2028-05-12" ));
1108+ assertLocalDate ("2016-05-26" , "yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2016-05-26" ));
1109+ assertLocalDate ("1994/08/27" , "yyyy/MM/dd" ).isEqualTo (LocalDate .parse ("1994-08-27" ));
1110+ assertLocalDate ("1995-08-16" , "yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("1995-08-16" ));
1111+ assertLocalDate ("2019-11-04" , "yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2019-11-04" ));
1112+ assertLocalDate ("2020-07-01" , "yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2020-07-01" ));
1113+ assertLocalDate ("2025/03/23" , "yyyy/MM/dd" ).isEqualTo (LocalDate .parse ("2025-03-23" ));
1114+ assertLocalDate ("Wed, 2013-10-02" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2013-10-02" ));
1115+ assertLocalDate ("2003/12/14" , "yyyy/MM/dd" ).isEqualTo (LocalDate .parse ("2003-12-14" ));
1116+ assertLocalDate ("2014-06-23" , "yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2014-06-23" ));
1117+ assertLocalDate ("1992-04-21" , "yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("1992-04-21" ));
1118+ }
1119+
1120+ @ Test
1121+ public void fuzzTestsWithZoneAndWeekdays () {
1122+ assertLocalDate ("2005-04-27" , "yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2005-04-27" ));
1123+ assertLocalDate ("2004-10-27" , "yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2004-10-27" ));
1124+ assertLocalDate ("1993/07/05" , "yyyy/MM/dd" ).isEqualTo (LocalDate .parse ("1993-07-05" ));
1125+ assertLocalDate ("Tue, 2016-09-20" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2016-09-20" ));
1126+ assertLocalDate ("2009/09/23" , "yyyy/MM/dd" ).isEqualTo (LocalDate .parse ("2009-09-23" ));
1127+ assertLocalDate ("2027-04-02" , "yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2027-04-02" ));
1128+ assertZonedDateTime ("1994-08-03 19:32:42 UTC" , "yyyy-MM-dd HH:mm:ss zzz" )
1129+ .isEqualTo (ZonedDateTime .parse ("1994-08-03T19:32:42+00:00[UTC]" ));
1130+ assertLocalDate ("Thu, 2011-06-09" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2011-06-09" ));
1131+ assertLocalDate ("2021-01-11" , "yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2021-01-11" ));
1132+ assertZonedDateTime ("2000-04-28 19:32 UTC" , "yyyy-MM-dd HH:mm zzz" )
1133+ .isEqualTo (ZonedDateTime .parse ("2000-04-28T19:32:00+00:00[UTC]" ));
1134+ assertLocalDate ("2018-08-13" , "yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2018-08-13" ));
1135+ assertLocalDate ("Mon, 2022-07-25" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2022-07-25" ));
1136+ assertLocalDate ("Mon, 2019-09-09" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2019-09-09" ));
1137+ assertLocalDate ("2024-08-04" , "yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2024-08-04" ));
1138+ assertLocalDate ("2027/11/13" , "yyyy/MM/dd" ).isEqualTo (LocalDate .parse ("2027-11-13" ));
1139+ assertLocalDate ("2008-06-03" , "yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2008-06-03" ));
1140+ assertLocalDate ("Wed, 2014-01-08" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2014-01-08" ));
1141+ assertLocalDate ("Wed, 2004-03-24" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2004-03-24" ));
1142+ assertLocalDate ("2023/06/04" , "yyyy/MM/dd" ).isEqualTo (LocalDate .parse ("2023-06-04" ));
1143+ assertZonedDateTime ("Thu, 1994-03-24 19:32:42.4 UTC" , "E, yyyy-MM-dd HH:mm:ss.S zzz" )
1144+ .isEqualTo (ZonedDateTime .parse ("1994-03-24T19:32:42.4+00:00[UTC]" ));
1145+ assertLocalDate ("2023-12-18" , "yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2023-12-18" ));
1146+ assertLocalDate ("1998-05-17" , "yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("1998-05-17" ));
1147+ assertLocalDate ("Fri, 2023-05-05" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2023-05-05" ));
1148+ assertLocalDate ("Wed, 1991-11-27" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("1991-11-27" ));
1149+ assertZonedDateTime ("Sat, 2027-06-05 19:32 UTC" , "E, yyyy-MM-dd HH:mm zzz" )
1150+ .isEqualTo (ZonedDateTime .parse ("2027-06-05T19:32:00+00:00[UTC]" ));
1151+ assertLocalDate ("2002/03/04" , "yyyy/MM/dd" ).isEqualTo (LocalDate .parse ("2002-03-04" ));
1152+ assertZonedDateTime ("2003-01-12 19:32 UTC" , "yyyy-MM-dd HH:mm zzz" )
1153+ .isEqualTo (ZonedDateTime .parse ("2003-01-12T19:32:00+00:00[UTC]" ));
1154+ assertLocalDate ("2020-06-11" , "yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2020-06-11" ));
1155+ assertLocalDate ("1991/08/20" , "yyyy/MM/dd" ).isEqualTo (LocalDate .parse ("1991-08-20" ));
1156+ assertLocalDate ("2015-03-23" , "yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2015-03-23" ));
1157+ assertZonedDateTime ("Sun, 2011-09-18 19:32:42 UTC" , "E, yyyy-MM-dd HH:mm:ss zzz" )
1158+ .isEqualTo (ZonedDateTime .parse ("2011-09-18T19:32:42+00:00[UTC]" ));
1159+ assertLocalDate ("Fri, 2027-12-03" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2027-12-03" ));
1160+ assertLocalDate ("Fri, 2020-05-15" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2020-05-15" ));
1161+ assertLocalDate ("Sun, 2020-10-25" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2020-10-25" ));
1162+ assertZonedDateTime ("Thu, 1997-02-06 19:32:42 UTC" , "E, yyyy-MM-dd HH:mm:ss zzz" )
1163+ .isEqualTo (ZonedDateTime .parse ("1997-02-06T19:32:42+00:00[UTC]" ));
1164+ assertLocalDate ("Tue, 2016-08-02" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2016-08-02" ));
1165+ assertZonedDateTime ("2025-08-06 19:32:42.4 UTC" , "yyyy-MM-dd HH:mm:ss.S zzz" )
1166+ .isEqualTo (ZonedDateTime .parse ("2025-08-06T19:32:42.4+00:00[UTC]" ));
1167+ assertZonedDateTime ("2003-09-08 19:32 UTC" , "yyyy-MM-dd HH:mm zzz" )
1168+ .isEqualTo (ZonedDateTime .parse ("2003-09-08T19:32:00+00:00[UTC]" ));
1169+ assertLocalDate ("Sat, 2020-04-11" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2020-04-11" ));
1170+ assertLocalDate ("Thu, 2024-08-01" , "E, yyyy-MM-dd" ).isEqualTo (LocalDate .parse ("2024-08-01" ));
1171+ assertZonedDateTime ("2001-04-25 19:32:42.47 UTC" , "yyyy-MM-dd HH:mm:ss.SS zzz" )
1172+ .isEqualTo (ZonedDateTime .parse ("2001-04-25T19:32:42.47+00:00[UTC]" ));
1173+ assertZonedDateTime ("Mon, 2003-10-20 19:32 UTC" , "E, yyyy-MM-dd HH:mm zzz" )
1174+ .isEqualTo (ZonedDateTime .parse ("2003-10-20T19:32:00+00:00[UTC]" ));
1175+ assertZonedDateTime ("Tue, 2014-08-05 19:32:42 UTC" , "E, yyyy-MM-dd HH:mm:ss zzz" )
1176+ .isEqualTo (ZonedDateTime .parse ("2014-08-05T19:32:42+00:00[UTC]" ));
1177+ assertZonedDateTime ("Fri, 1999-01-22 19:32 UTC" , "E, yyyy-MM-dd HH:mm zzz" )
1178+ .isEqualTo (ZonedDateTime .parse ("1999-01-22T19:32:00+00:00[UTC]" ));
1179+ }
1180+
1181+ @ Test
1182+ public void singleDigitSecond_notSupported () {
1183+ assertThrows (DateTimeException .class , () -> formatOf ("12:00:1" ));
1184+ }
1185+
1186+ @ Test
1187+ public void ambiguousMonthAndDay () {
1188+ assertThrows (DateTimeException .class , () -> formatOf ("01/02/03" ));
1189+ assertThrows (DateTimeException .class , () -> formatOf ("01/02/2003" ));
1190+ }
1191+
1192+ @ Test
1193+ public void trailingDotAfterSecond_notSupported () {
1194+ assertThrows (DateTimeException .class , () -> formatOf ("2023-01-01T00:00:00." ));
1195+ }
1196+
1197+ private static <T > ComparableSubject <ZonedDateTime > assertZonedDateTime (
1198+ @ CompileTimeConstant String example , String equivalentPattern ) {
1199+ String pattern = DateTimeFormats .inferDateTimePattern (example );
1200+ assertThat (pattern ).isEqualTo (equivalentPattern );
1201+ DateTimeFormatter formatter = DateTimeFormatter .ofPattern (pattern );
1202+ ZonedDateTime dateTime = ZonedDateTime .parse (example , formatter );
1203+ assertThat (dateTime .format (formatter )).isEqualTo (example );
1204+ return assertThat (dateTime );
1205+ }
1206+
9801207 private static ComparableSubject <LocalDateTime > assertLocalDateTime (
9811208 @ CompileTimeConstant String example , String equivalentPattern ) {
9821209 String pattern = DateTimeFormats .inferDateTimePattern (example );
0 commit comments