/*
***************************************************************************************
* Copyright (C) 2006 EsperTech, Inc. All rights reserved. *
* http://www.espertech.com/esper *
* 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.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
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";
/**
* The default date-time format with time zone.
*/
public static final String DEFAULT_XMLLIKE_DATE_FORMAT_WITH_ZONE = "yyyy-MM-dd'T'HH:mm:ss.SSSZ";
private static final Logger log = LoggerFactory.getLogger(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) {
return print(date, new SimpleDateFormat(DEFAULT_XMLLIKE_DATE_FORMAT));
}
/**
* 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 printWithZone(Object date) {
return print(date, new SimpleDateFormat(DEFAULT_XMLLIKE_DATE_FORMAT_WITH_ZONE));
}
private static String print(Object date, SimpleDateFormat sdf) {
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 LocalDateTime
*/
public static LocalDateTime parseDefaultLocalDateTime(String dateTime) {
return LocalDateTime.parse(dateTime, DateTimeFormatter.ofPattern(DEFAULT_XMLLIKE_DATE_FORMAT));
}
/**
* Parse the date-time string using {@link #DEFAULT_XMLLIKE_DATE_FORMAT} assume System default time zone
*
* @param dateTime date-time string
* @return ZonedDateTime
*/
public static ZonedDateTime parseDefaultZonedDateTime(String dateTime) {
return parseDefaultLocalDateTime(dateTime).atZone(ZoneId.systemDefault());
}
/**
* Parse the date-time string using {@link #DEFAULT_XMLLIKE_DATE_FORMAT_WITH_ZONE}.
*
* @param dateTimeWithZone date-time string
* @return milliseconds
*/
public static long parseDefaultMSecWZone(String dateTimeWithZone) {
return parse(dateTimeWithZone, new SimpleDateFormat(DEFAULT_XMLLIKE_DATE_FORMAT_WITH_ZONE)).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;
}
}