org.apache.jena.atlas.lib.DateTimeUtils.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.jena.atlas.lib.DateTimeUtils.java

Source

/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.apache.jena.atlas.lib;

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");

    public static String nowAsXSDDateTimeString() {
        return calendarToXSDDateTimeString(new GregorianCalendar());
    }

    public static String todayAsXSDDateString() {
        return calendarToXSDDateString(new GregorianCalendar());
    }

    /** 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) {
        FastDateFormat df = FastDateFormat.getInstance(formatString);
        return df.format(new Date());
    }

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

    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.
    public static String calendarToXSDDateTimeString(Calendar cal) {
        FastDateFormat fmt = hasZeroMilliSeconds(cal) ? dateTimeFmt_XSD_ms0 : dateTimeFmt_XSD_ms;
        return calendarToXSDString(cal, fmt);
    }

    public static String calendarToXSDDateString(Calendar cal) {
        return calendarToXSDString(cal, dateFmt_yyyymmdd);
    }

    // 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;
        return calendarToXSDString(cal, fmt);
    }

    private static String calendarToXSDString(Calendar cal, FastDateFormat fmt) {
        String lex = fmt.format(cal);
        // 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 ;
    //    }
}