22
33import java .time .LocalDate ;
44import java .time .LocalDateTime ;
5+ import java .time .ZoneOffset ;
56import java .time .ZonedDateTime ;
67import java .time .format .DateTimeFormatter ;
78import java .time .format .DateTimeParseException ;
8- import java .util .*;
9+ import java .util .ArrayList ;
10+ import java .util .HashMap ;
11+ import java .util .List ;
12+ import java .util .Map ;
913
1014public class ObjectConverter {
1115
@@ -26,24 +30,18 @@ public static Object convertObject(Object input) {
2630 return ((Number ) input ).doubleValue ();
2731 }
2832 if (input instanceof String str ) {
29- if (! str . isEmpty () && str .length () >= 8 && Character .isDigit (str .charAt (0 ))) {
33+ if (str .length () >= 8 && Character .isDigit (str .charAt (0 ))) {
3034 for (DateTimeFormatter formatter : DATE_FORMATTERS ) {
3135 try {
3236 // Try parsing as different date/time types
3337 if (str .contains ("T" )) {
34- if (str .contains ("Z" ) || str .contains ( "+" ) || str . contains ( "- " )) {
35- return Date . from ( ZonedDateTime .parse (str , formatter ).toInstant () );
38+ if (str .endsWith ("Z" ) || str .matches ( ".*[+-] \\ d{2}(: \\ d{2})?$ " )) {
39+ return ZonedDateTime .parse (str , formatter ).toInstant ();
3640 } else {
37- return Date .from (
38- LocalDateTime .parse (str , formatter )
39- .atZone (java .time .ZoneOffset .UTC )
40- .toInstant ());
41+ return LocalDateTime .parse (str , formatter ).toInstant (ZoneOffset .UTC );
4142 }
4243 } else {
43- return Date .from (
44- LocalDate .parse (str , formatter )
45- .atStartOfDay (java .time .ZoneOffset .UTC )
46- .toInstant ());
44+ return LocalDate .parse (str , formatter );
4745 }
4846 } catch (DateTimeParseException e ) {
4947 // Continue to next formatter
0 commit comments