Skip to content

Commit

Permalink
JENA-1756: Use java.time.format.DateTimeFormatter in DateTimeUtils
Browse files Browse the repository at this point in the history
  • Loading branch information
afs committed Sep 11, 2019
1 parent d26c4fe commit fa57c60
Showing 1 changed file with 26 additions and 59 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,29 +18,22 @@

package org.apache.jena.atlas.lib;

import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Calendar ;
import java.util.Date ;
import java.util.GregorianCalendar ;

import org.apache.commons.lang3.time.FastDateFormat ;

public class DateTimeUtils {

// Include timezone (even xsd:dates have timezones; Calendars have timezones)
// NB in SimpleDateFormat != FastDateFormat
// SimpleDateFormat does not format Calendars.
// SimpleDateFormat has "X" for ISO format tmezones (+00:00)
// FastDateFormat uses "ZZ" for this.
private static final FastDateFormat dateTimeFmt_display = FastDateFormat.getInstance("yyyy/MM/dd HH:mm:ss z") ;
private static final FastDateFormat dateFmt_yyyymmdd = FastDateFormat.getInstance("yyyy-MM-ddZZ") ;
// For milliseconds == 0
private static final FastDateFormat dateTimeFmt_XSD_ms0 = FastDateFormat.getInstance("yyyy-MM-dd'T'HH:mm:ssZZ") ;
// For milliseconds != 0
private static final FastDateFormat dateTimeFmt_XSD_ms = FastDateFormat.getInstance("yyyy-MM-dd'T'HH:mm:ss.SSSZZ") ;
// For milliseconds == 0
private static final FastDateFormat timeFmt_XSD_ms0 = FastDateFormat.getInstance("HH:mm:ssZZ") ;
// For milliseconds != 0
private static final FastDateFormat timeFmt_XSD_ms = FastDateFormat.getInstance("HH:mm:ss.SSSZZ") ;
// Use xxx to get +00:00 format with DateTimeFormatter
private static final DateTimeFormatter dateTimeFmt_display = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss zz");
private static final DateTimeFormatter dateFmt_yyyymmdd = DateTimeFormatter.ofPattern("yyyy-MM-ddxxx");
private static final DateTimeFormatter dateTimeFmt_XSD_ms0 = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
private static final DateTimeFormatter dateTimeFmt_XSD_ms = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSxxx");
private static final DateTimeFormatter timeFmt_XSD_ms0 = DateTimeFormatter.ofPattern("HH:mm:ssxxx");
private static final DateTimeFormatter timeFmt_XSD_ms = DateTimeFormatter.ofPattern("HH:mm:ss.SSSxxx");

public static String nowAsXSDDateTimeString() {
return calendarToXSDDateTimeString(new GregorianCalendar()) ;
Expand All @@ -60,68 +53,42 @@ public static String nowAsString(String formatString) {
return df.format(new Date()) ;
}

public static String nowAsString(FastDateFormat dateFormat) {
return dateFormat.format(new Date()) ;
public static String nowAsString(DateTimeFormatter dateFormat) {
ZonedDateTime now = ZonedDateTime.now();
return dateFormat.format(now);
}

private static boolean hasZeroMilliSeconds(Calendar cal) {
return ! cal.isSet(Calendar.MILLISECOND) || cal.get(Calendar.MILLISECOND) == 0 ;
}

// Canonical fom : if ms == 0, don't include in the string.
// Canonical form : if ms == 0, don't include in the string.
public static String calendarToXSDDateTimeString(Calendar cal) {
FastDateFormat fmt = hasZeroMilliSeconds(cal)
? dateTimeFmt_XSD_ms0
: dateTimeFmt_XSD_ms ;
DateTimeFormatter fmt = hasZeroMilliSeconds(cal)
? dateTimeFmt_XSD_ms0
: dateTimeFmt_XSD_ms ;
return calendarToXSDString(cal, fmt) ;
}

public static String calendarToXSDDateString(Calendar cal) {
return calendarToXSDString(cal, dateFmt_yyyymmdd) ;
String x = calendarToXSDString(cal, dateFmt_yyyymmdd) ;
if ( x.endsWith("Z") )
x = x.substring(0, x.length()-1)+"+00:00";
return x;
}

// Canonical fom : if ms == 0, don't include in the string.
public static String calendarToXSDTimeString(Calendar cal) {
FastDateFormat fmt = hasZeroMilliSeconds(cal)
? timeFmt_XSD_ms0
: timeFmt_XSD_ms ;
DateTimeFormatter fmt = hasZeroMilliSeconds(cal)
? timeFmt_XSD_ms0
: timeFmt_XSD_ms ;
return calendarToXSDString(cal, fmt) ;
}

private static String calendarToXSDString(Calendar cal, FastDateFormat fmt) {
String lex = fmt.format(cal) ;
private static String calendarToXSDString(Calendar cal, DateTimeFormatter fmt) {
ZonedDateTime zdt = ((GregorianCalendar)cal).toZonedDateTime();
String lex = fmt.format(zdt) ;
// lex = lex + calcTimezone(cal) ;
return lex ;
}

// Not needed because of FastDateFormat
// private static String calcTimezone(Calendar cal) {
// Date date = cal.getTime() ;
// TimeZone z = cal.getTimeZone() ;
// int tz = z.getRawOffset() ;
//
// if ( z.inDaylightTime(date) ) {
// int tzDst = z.getDSTSavings() ;
// tz = tz + tzDst ;
// }
//
// String sign = "+" ;
// if ( tz < 0 ) {
// sign = "-" ;
// tz = -tz ;
// }
//
// int tzH = tz / (60 * 60 * 1000) ; // Integer divide towards zero.
// int tzM = (tz - tzH * 60 * 60 * 1000) / (60 * 1000) ;
//
// String tzH_str = Integer.toString(tzH) ;
// String tzM_str = Integer.toString(tzM) ;
//
// if ( tzH < 10 )
// tzH_str = "0" + tzH_str ;
// if ( tzM < 10 )
// tzM_str = "0" + tzM_str ;
// return sign + tzH_str + ":" + tzM_str ;
// }
}

0 comments on commit fa57c60

Please sign in to comment.