/*
* jPOS Project [http://jpos.org]
* Copyright (C) 2000-2017 jPOS Software SRL
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.jpos.util;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class DateUtil {
static SimpleDateFormat dfDate = (SimpleDateFormat) DateFormat.getDateInstance(DateFormat.SHORT, Locale.US);
static SimpleDateFormat dfDateTime = (SimpleDateFormat) DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM, Locale.US);
static SimpleDateFormat dfDate_mmddyyyy = new SimpleDateFormat("MM/dd/yyyy");
static SimpleDateFormat dfDate_yyyymmdd = new SimpleDateFormat("yyyyMMdd");
static SimpleDateFormat dfDateTime_mmddyyyy = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
static SimpleDateFormat dfDate_mmddyy = new SimpleDateFormat("MM/dd/yy");
public static Date parseDate (String s) throws ParseException {
if (s == null)
return null;
return dfDate.parse (s);
}
public static Date parseDate_mmddyyyy (String s) throws ParseException {
if (s == null)
return null;
return dfDate_mmddyyyy.parse (s);
}
public static Date parseDate_yyyymmdd (String s) throws ParseException {
if (s == null)
return null;
return dfDate_yyyymmdd.parse (s);
}
public static Date parseDate_mmddyy (String s) throws ParseException {
if (s == null)
return null;
return dfDate_mmddyy.parse (s);
}
public static Date parseDateTime (String s) throws ParseException {
if (s == null)
return null;
return dfDateTime.parse (s);
}
public static Date parseDateTime_mmddyyyy (String s) throws ParseException {
if (s == null)
return null;
return dfDateTime_mmddyyyy.parse (s);
}
public static Date parseTimestamp (String s) throws ParseException {
if (s == null)
return null;
return dfDateTime_mmddyyyy.parse (s);
}
public static Date parseDateTime_mmddyyyy (String s, String tzString)
throws ParseException
{
if (s == null)
return null;
DateFormat df = (DateFormat) dfDateTime_mmddyyyy.clone();
if (tzString != null)
df.setTimeZone (TimeZone.getTimeZone (tzString));
return df.parse (s);
}
public static String dateToString (Date d) {
if (d == null)
return null;
return dfDate.format (d);
}
public static String dateToString_mmddyyyy (Date d) {
if (d == null)
return null;
return dfDate_mmddyyyy.format (d);
}
public static String dateTimeToString (Date d) {
if (d == null)
return null;
return dfDateTime.format (d);
}
public static String dateTimeToString (Date d, String tzString) {
if (d == null)
return null;
DateFormat df = (DateFormat) dfDateTime.clone();
if (tzString != null)
df.setTimeZone (TimeZone.getTimeZone (tzString));
return df.format (d);
}
public static String dateTimeToString_mmddyyyy (Date d) {
if (d == null)
return null;
return dfDateTime_mmddyyyy.format (d);
}
public static String timestamp (Date d) {
if (d == null)
return null;
return dfDateTime_mmddyyyy.format (d);
}
public static String postdate (Date d) {
if (d == null)
return null;
return dfDate_mmddyyyy.format (d);
}
/**
* @param d MMDDAA
* @param t HHMMSS
* @return Date Object
*/
public static Date parseDateTime (String d, String t) {
Calendar cal = new GregorianCalendar();
Date now = new Date ();
cal.setTime (now);
int YY = Integer.parseInt (d.substring (4));
int MM = Integer.parseInt (d.substring (0, 2))-1;
int DD = Integer.parseInt (d.substring (2, 4));
int hh = Integer.parseInt (t.substring (0, 2));
int mm = Integer.parseInt (t.substring (2, 4));
int ss = Integer.parseInt (t.substring (4));
int century = cal.get (Calendar.YEAR) / 100;
cal.set (Calendar.YEAR, (century * 100) + YY);
cal.set (Calendar.MONTH, MM);
cal.set (Calendar.DATE, DD);
cal.set (Calendar.HOUR_OF_DAY, hh);
cal.set (Calendar.MINUTE, mm);
cal.set (Calendar.SECOND, ss);
//
// I expect this program to continue running by 2099 ... --apr@jpos.org
//
Date thisCentury = cal.getTime();
cal.set (Calendar.YEAR, (--century * 100) + YY);
Date previousCentury = cal.getTime();
if (Math.abs (now.getTime() - previousCentury.getTime()) <
Math.abs (now.getTime() - thisCentury.getTime()) )
thisCentury = previousCentury;
return thisCentury;
}
/**
* @param t HHMM[SS]
* @return Date Object
*/
public static Date parseTime (String t) {
return parseTime (t, new Date());
}
public static Date parseTime (String t, Date now) {
Calendar cal = new GregorianCalendar();
cal.setTime (now);
int hh = Integer.parseInt (t.substring (0, 2));
int mm = Integer.parseInt (t.substring (2, 4));
int ss = t.length() > 4 ? Integer.parseInt (t.substring (4)) : 0;
cal.set (Calendar.HOUR_OF_DAY, hh);
cal.set (Calendar.MINUTE, mm);
cal.set (Calendar.SECOND, ss);
return cal.getTime();
}
public static String dateToString (Date d, String tzString) {
DateFormat df = (DateFormat) DateFormat.getDateInstance().clone();
if (tzString != null)
df.setTimeZone (TimeZone.getTimeZone (tzString));
return df.format (d);
}
public static String timeToString (Date d, String tzString) {
DateFormat df = (DateFormat)
DateFormat.getTimeInstance(DateFormat.SHORT).clone();
if (tzString != null)
df.setTimeZone (TimeZone.getTimeZone (tzString));
return df.format (d);
}
public static String timeToString (Date d) {
return timeToString (d, null);
}
public static String toDays (long period) {
StringBuffer sb = new StringBuffer();
long hours = period / 3600000L;
if (hours > 0) {
sb.append (hours);
sb.append ("h");
period -= (hours * 3600000L);
}
long mins = period / 60000L;
if (mins > 0) {
sb.append (mins);
sb.append ("m");
period -= (mins * 60000L);
}
long secs = period / 1000L;
sb.append (secs);
sb.append ("s");
return sb.toString();
}
}