Repository: jena Updated Branches: refs/heads/master 5af38dde8 -> 311ee927f
JENA-837 : Use FastDateFormat.format(Calendar) to do the timezone. Project: http://git-wip-us.apache.org/repos/asf/jena/repo Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/0c7285c2 Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/0c7285c2 Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/0c7285c2 Branch: refs/heads/master Commit: 0c7285c279d340703c9bcdbfe4d99e3ad14bdea8 Parents: 5af38dd Author: Andy Seaborne <[email protected]> Authored: Tue Dec 30 20:35:14 2014 +0000 Committer: Andy Seaborne <[email protected]> Committed: Tue Dec 30 20:35:14 2014 +0000 ---------------------------------------------------------------------- .../java/com/hp/hpl/jena/sparql/util/Utils.java | 169 +++++++++---------- .../com/hp/hpl/jena/sparql/util/TestUtils.java | 10 +- 2 files changed, 82 insertions(+), 97 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jena/blob/0c7285c2/jena-arq/src/main/java/com/hp/hpl/jena/sparql/util/Utils.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/com/hp/hpl/jena/sparql/util/Utils.java b/jena-arq/src/main/java/com/hp/hpl/jena/sparql/util/Utils.java index e1ce615..2cd29c3 100644 --- a/jena-arq/src/main/java/com/hp/hpl/jena/sparql/util/Utils.java +++ b/jena-arq/src/main/java/com/hp/hpl/jena/sparql/util/Utils.java @@ -16,154 +16,141 @@ * limitations under the License. */ -package com.hp.hpl.jena.sparql.util; +package com.hp.hpl.jena.sparql.util ; import java.math.BigDecimal ; import java.util.Calendar ; import java.util.Date ; import java.util.GregorianCalendar ; -import java.util.TimeZone ; -import org.apache.commons.lang3.time.FastDateFormat; +import org.apache.commons.lang3.time.FastDateFormat ; import com.hp.hpl.jena.datatypes.xsd.XSDDateTime ; /** Miscellaneous operations - not query specific */ -public class Utils -{ +public class Utils { + // 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-dd") ; - private static final FastDateFormat dateTimeFmt_XSD = FastDateFormat.getInstance("yyyy-MM-dd'T'HH:mm:ss.SSS") ; - private static final FastDateFormat timeFmt_hhmmssSS = FastDateFormat.getInstance("HH:mm:ss.SSS"); + private static final FastDateFormat dateFmt_yyyymmdd = FastDateFormat.getInstance("yyyy-MM-ddZZ") ; + private static final FastDateFormat dateTimeFmt_XSD = FastDateFormat.getInstance("yyyy-MM-dd'T'HH:mm:ss.SSSZZ") ; + private static final FastDateFormat timeFmt_hhmmssSS = FastDateFormat.getInstance("HH:mm:ss.SSSZZ") ; static public String className(Object obj) { if ( obj == null ) return "null" ; return classShortName(obj.getClass()) ; } - - static public String classShortName(Class<?> cls) - { + + static public String classShortName(Class<? > cls) { String tmp = cls.getName() ; int i = tmp.lastIndexOf('.') ; - tmp = tmp.substring(i+1) ; + tmp = tmp.substring(i + 1) ; return tmp ; } - - public static String nowAsXSDDateTimeString() - { + + public static String nowAsXSDDateTimeString() { return calendarToXSDDateTimeString(new GregorianCalendar()) ; } - - public static String todayAsXSDDateString() - { + + public static String todayAsXSDDateString() { return calendarToXSDDateString(new GregorianCalendar()) ; } - public static String XSDDateTime2String(XSDDateTime xdt) - { + public static String XSDDateTime2String(XSDDateTime xdt) { return xdt.toString() ; } - + /** Return "now" as readable string (date in yyyy/MM/dd format) */ - public static String nowAsString() - { return nowAsString(dateTimeFmt_display) ; } - - public static String nowAsString(String formatString) - { + public static String nowAsString() { + return nowAsString(dateTimeFmt_display) ; + } + + public static String nowAsString(String formatString) { FastDateFormat df = FastDateFormat.getInstance(formatString) ; return df.format(new Date()) ; } - public static String nowAsString(FastDateFormat dateFormat) - { + public static String nowAsString(FastDateFormat dateFormat) { return dateFormat.format(new Date()) ; } - public static String calendarToXSDDateTimeString(Calendar cal) - { + public static String calendarToXSDDateTimeString(Calendar cal) { return calendarToXSDString(cal, dateTimeFmt_XSD) ; } - - public static String calendarToXSDDateString(Calendar cal) - { + + public static String calendarToXSDDateString(Calendar cal) { return calendarToXSDString(cal, dateFmt_yyyymmdd) ; } - - public static String calendarToXSDTimeString(Calendar cal) - { - return calendarToXSDString(cal, timeFmt_hhmmssSS); - } - private static String calendarToXSDString(Calendar cal, FastDateFormat fmt ) - { - // c.f. Constructor on Jena's XSDDateTime - // Only issue is that it looses the timezone through (Xerces) - // normalizing to UTC. - Date date = cal.getTime(); - String lex = fmt.format(date); - lex = lex + calcTimezone(cal); - return lex; + public static String calendarToXSDTimeString(Calendar cal) { + return calendarToXSDString(cal, timeFmt_hhmmssSS) ; } - private static String calcTimezone(Calendar cal) - { - Date date = cal.getTime() ; - TimeZone z = cal.getTimeZone() ; - int tz = z.getRawOffset(); + private static String calendarToXSDString(Calendar cal, FastDateFormat fmt) { + String lex = fmt.format(cal) ; + // lex = lex + calcTimezone(cal) ; + return lex ; + } - if ( z.inDaylightTime(date) ) - { - int tzDst = z.getDSTSavings() ; - tz = tz + tzDst ; - } - - String sign = "+" ; - if ( tz < 0 ) - { - sign = "-" ; - tz = -tz ; - } + // No tneeded for FastDateFormat.s +// 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 ; +// } - 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 ; - } - - static public String stringForm(BigDecimal decimal) - { + static public String stringForm(BigDecimal decimal) { return decimal.toPlainString() ; } - - static public String stringForm(double d) - { - if ( Double.isInfinite(d) ) - { - if ( d < 0 ) return "-INF" ; + + static public String stringForm(double d) { + if ( Double.isInfinite(d) ) { + if ( d < 0 ) + return "-INF" ; return "INF" ; } - if ( Double.isNaN(d) ) return "NaN" ; - + if ( Double.isNaN(d) ) + return "NaN" ; + // Otherwise, SPARQL form always has "e0" String x = Double.toString(d) ; if ( (x.indexOf('e') != -1) || (x.indexOf('E') != -1) ) return x ; // Renormalize? - return x+"e0" ; + return x + "e0" ; } - - static public String stringForm(float f) - { + + static public String stringForm(float f) { // No SPARQL short form. return Float.toString(f) ; } http://git-wip-us.apache.org/repos/asf/jena/blob/0c7285c2/jena-arq/src/test/java/com/hp/hpl/jena/sparql/util/TestUtils.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/test/java/com/hp/hpl/jena/sparql/util/TestUtils.java b/jena-arq/src/test/java/com/hp/hpl/jena/sparql/util/TestUtils.java index e2d59b7..1bd66ae 100644 --- a/jena-arq/src/test/java/com/hp/hpl/jena/sparql/util/TestUtils.java +++ b/jena-arq/src/test/java/com/hp/hpl/jena/sparql/util/TestUtils.java @@ -35,7 +35,7 @@ public class TestUtils { Calendar cal = createCalendar(1984, Calendar.MARCH, 22, 14, 32, 1,"Z") ; assertEquals("1984-03-22T14:32:01.000+00:00", calendarToXSDDateTimeString(cal)); cal.setTimeZone(TimeZone.getTimeZone("MST")); - assertEquals("1984-03-22T14:32:01.000-07:00", calendarToXSDDateTimeString(cal)); + assertEquals("1984-03-22T07:32:01.000-07:00", calendarToXSDDateTimeString(cal)); } @Test @@ -45,17 +45,15 @@ public class TestUtils { assertEquals("1984-03-22+00:00", calendarToXSDDateString(cal)); cal.setTimeZone(TimeZone.getTimeZone("MST")); assertEquals("1984-03-22-07:00", calendarToXSDDateString(cal)); - } @Test public void testCalendarToXSDTimeString() throws Exception { Calendar cal = createCalendar(1984, Calendar.MARCH, 22, 14, 32, 1, "GMT+01:00"); - cal.setTimeZone(TimeZone.getTimeZone("GMT+01:00")) ; - // Moves the cal - assertEquals("13:32:01.000+01:00", calendarToXSDTimeString(cal)); + assertEquals("14:32:01.000+01:00", calendarToXSDTimeString(cal)); + // Different timezone - moves the cal point-in-time. cal.setTimeZone(TimeZone.getTimeZone("MST")); - assertEquals("13:32:01.000-07:00", calendarToXSDTimeString(cal)); + assertEquals("06:32:01.000-07:00", calendarToXSDTimeString(cal)); } private static Calendar createCalendar(int year, int month, int dayOfMonth, int hourOfDay,
