All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.unitedinternet.cosmo.util.DateUtil Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2006 Open Source Applications Foundation
 * 
 * Licensed 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.unitedinternet.cosmo.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Date;
import java.util.TimeZone;

/**
 * Provides utility methods for working with dates and times.
 */
public class DateUtil {
    private static final String RFC3339_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ssz";

    /**
     * Parses a datetime+timezone string in one of the following
     * formats, returning a calendar in the given timezone.
     * 
     * 2002-10-10T00:00:00+05:00
     * 2002-10-09T19:00:00Z
     * 2002-10-10T00:00:00GMT+05:00
     * 
     * @param date string
     */
    public static Calendar parseRfc3339Calendar(String value) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat(RFC3339_DATE_FORMAT);
        TimeZone timezone = null;
        Date date = null;
        if(value.charAt(value.length()-1)=='Z') {
            value = value.replace("Z", "GMT-00:00");
            timezone = TimeZone.getTimeZone("GMT-00:00");
            date = sdf.parse(value);
        }
        else if(value.indexOf("GMT")==-1 && 
                (value.charAt(value.length()-6) == '+' ||
                 value.charAt(value.length()-6) == '-')) {
            String tzId = "GMT" + value.substring(value.length()-6);
            value = value.substring(0, value.length()-6) + tzId;
            timezone = TimeZone.getTimeZone(tzId);
            date = sdf.parse(value);
        } else {
            String tzId = value.substring(value.length()-9);
            timezone = TimeZone.getTimeZone(tzId);
            date = sdf.parse(value);
        }
            
        GregorianCalendar cal = new GregorianCalendar(timezone);
        cal.setTime(date);

        return cal;
    }

    /**
     * Parses a datetime+timezone string in one of the following
     * formats, returning a UTC date:
     * 
     * 2002-10-10T00:00:00+05:00
     * 2002-10-10T00:00:00GMT+05:00
     * 
     * @param date string
     * @throws ParseException
     */
    public static Date parseRfc3339Date(String date) throws ParseException {
        return parseDate(date, RFC3339_DATE_FORMAT);
    }
    
    /**
     * Parses a datetime+timezone string in the given format,
     * returning a UTC date.
     * 
     * @param date string
     * @throws ParseException
     */
    public static Date parseDate(String date, String format)
            throws ParseException {
        return parseDate(date, format, null);
    }

    /**
     * Parses a datetime+timezone string in the given format and
     * timezone, returning a UTC date.
     * 
     * @param date string
     * @throws ParseException
     */
    public static Date parseDate(String date, String format, TimeZone tz)
            throws ParseException {
        SimpleDateFormat formatter = new SimpleDateFormat(format);
        if (tz != null) {
            formatter.setTimeZone(tz);
        }
        return formatter.parse(date);
    }

    /** */
    public static String formatRfc3339Calendar(Calendar cal) {
        return formatRfc3339Date(cal.getTime(), cal.getTimeZone());
    }

    /** */
    public static String formatRfc3339Date(Date date) {
        return formatRfc3339Date(date, null);
    }

    /** */
    public static String formatRfc3339Date(Date date,
                                           TimeZone tz) {
        String raw = formatDate(RFC3339_DATE_FORMAT, date, tz);
        return raw.replaceFirst("GMT", "");
    }

    /** */
    public static String formatDate(String pattern,
                                    Date date) {
        return formatDate(pattern, date, null);
    }

    /** */
    public static String formatDate(String pattern, Date date, TimeZone tz) {
        SimpleDateFormat formatter = new SimpleDateFormat(pattern);
        if (tz != null) {
            formatter.setTimeZone(tz);
        }
        return formatter.format(date);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy