/* * ************************************************************************************* * Copyright (C) 2008 EsperTech, Inc. All rights reserved. * * http://esper.codehaus.org * * http://www.espertech.com * * ---------------------------------------------------------------------------------- * * The software in this package is published under the terms of the GPL license * * a copy of which has been included with this distribution in the license.txt file. * * ************************************************************************************* */ package com.espertech.esper.client.util; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * Utility class for date-time functions. */ public class DateTime { /** * The default date-time format. */ public static final String DEFAULT_XMLLIKE_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS"; private static final Log log = LogFactory.getLog(DateTime.class); /** * Returns a calendar from a given string using the default SimpleDateFormat for parsing. * @param datestring to parse * @return calendar */ public static Calendar toCalendar(String datestring) { return parseGetCal(datestring, new SimpleDateFormat()); } /** * Returns a calendar from a given string using the provided format. * @param datestring to parse * @param format to use for parsing * @return calendar */ public static Calendar toCalendar(String datestring, String format) { Date d = parse(datestring, format); Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(d.getTime()); return cal; } /** * Returns a date from a given string using the default SimpleDateFormat for parsing. * @param datestring to parse * @return date object */ public static Date toDate(String datestring) { return parse(datestring); } /** * Returns a date from a given string using the provided format. * @param datestring to parse * @param format to use for parsing * @return date object */ public static Date toDate(String datestring, String format) { return parse(datestring, format); } /** * Returns a long-millisecond value from a given string using the default SimpleDateFormat for parsing. * @param datestring to parse * @return long msec */ public static Long toMillisec(String datestring) { Date date = parse(datestring); if (date == null) { return null; } return date.getTime(); } /** * Returns a long-millisecond value from a given string using the provided format. * @param datestring to parse * @param format to use for parsing * @return long msec */ public static Long toMillisec(String datestring, String format) { Date date = parse(datestring, format); if (date == null) { return null; } return date.getTime(); } /** * Print the provided date object using the default date format {@link #DEFAULT_XMLLIKE_DATE_FORMAT} * @param date should be long, Date or Calendar * @return date string */ public static String print(Object date) { SimpleDateFormat sdf = new SimpleDateFormat(DEFAULT_XMLLIKE_DATE_FORMAT); if (date instanceof Long) { return sdf.format(new Date((Long) date)); } if (date instanceof Date) { return sdf.format((Date) date); } if (date instanceof Calendar) { return sdf.format(((Calendar) date).getTime()); } throw new IllegalArgumentException("Date format for type '" + date.getClass() + "' not possible"); } /** * Parse the date-time string using {@link #DEFAULT_XMLLIKE_DATE_FORMAT}. * @param dateTime date-time string * @return milliseconds */ public static long parseDefaultMSec(String dateTime) { return parse(dateTime, new SimpleDateFormat(DEFAULT_XMLLIKE_DATE_FORMAT)).getTime(); } /** * Parse the date-time string using {@link #DEFAULT_XMLLIKE_DATE_FORMAT}. * @param dateTime date-time string * @return date */ public static Date parseDefaultDate(String dateTime) { return parse(dateTime, new SimpleDateFormat(DEFAULT_XMLLIKE_DATE_FORMAT)); } /** * Parse the date-time string using {@link #DEFAULT_XMLLIKE_DATE_FORMAT}. * @param dateTime date-time string * @return calendar */ public static Calendar parseDefaultCal(String dateTime) { Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(parseDefaultMSec(dateTime)); return cal; } private static Date parse(String str) { return parse(str, new SimpleDateFormat()); } private static Date parse(String str, String format) { SimpleDateFormat sdf; try { sdf = new SimpleDateFormat(format); } catch (Exception ex) { log.warn("Error in date format '" + str + "': " + ex.getMessage(), ex); return null; } return parse(str, sdf); } private static Date parse(String str, SimpleDateFormat format) { Date d; try { d = format.parse(str); } catch (ParseException e) { log.warn("Error parsing date '" + str + "' according to format '" + format.toPattern() + "': " + e.getMessage(), e); return null; } return d; } private static Calendar parseGetCal(String str, SimpleDateFormat format) { Date d = parse(str, format); if (d == null) { return null; } Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(d.getTime()); return cal; } }