20
20
21
21
package com .arangodb .velocypack .internal .util ;
22
22
23
- import java .text .DateFormat ;
24
23
import java .text .ParseException ;
25
- import java .text .SimpleDateFormat ;
26
- import java .util .TimeZone ;
24
+ import java .time .Instant ;
25
+ import java .time .ZoneOffset ;
26
+ import java .time .ZonedDateTime ;
27
+ import java .time .format .DateTimeFormatter ;
28
+ import java .time .format .DateTimeParseException ;
29
+ import java .util .Date ;
27
30
28
31
/**
29
32
* @author Mark Vollmary
30
33
*
31
34
*/
32
35
public class DateUtil {
33
36
34
- private static final ThreadLocal <DateFormat > DATE_FORMAT = new ThreadLocal <DateFormat >() {
35
- @ Override
36
- protected DateFormat initialValue () {
37
- final SimpleDateFormat formatter = new SimpleDateFormat ("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" );
38
- formatter .setTimeZone (TimeZone .getTimeZone ("UTC" ));
39
- return formatter ;
40
- }
41
- };
37
+ private final static DateTimeFormatter DATE_FORMATTER = DateTimeFormatter
38
+ .ofPattern ("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" )
39
+ .withZone (ZoneOffset .UTC );
42
40
43
41
private DateUtil () {
44
42
super ();
@@ -60,11 +58,15 @@ public static java.sql.Timestamp toSQLTimestamp(final byte[] array, final int of
60
58
}
61
59
62
60
public static java .util .Date parse (final String source ) throws ParseException {
63
- return DATE_FORMAT .get ().parse (source );
61
+ try {
62
+ return new Date (ZonedDateTime .parse (source ).toInstant ().toEpochMilli ());
63
+ } catch (DateTimeParseException e ) {
64
+ throw new ParseException ("Unparseable date: \" " + e .getParsedString () + "\" " , e .getErrorIndex ());
65
+ }
64
66
}
65
67
66
68
public static String format (final java .util .Date date ) {
67
- return DATE_FORMAT . get (). format ( date );
69
+ return DATE_FORMATTER . format ( ZonedDateTime . ofInstant ( Instant . ofEpochMilli ( date . getTime ()), ZoneOffset . UTC ) );
68
70
}
69
71
70
72
}
0 commit comments