/**
* SPINdle (version 2.2.2)
* Copyright (C) 2009-2012 NICTA Ltd.
*
* This file is part of SPINdle project.
*
* SPINdle is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* SPINdle 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with SPINdle. If not, see <http://www.gnu.org/licenses/>.
*
* @author H.-P. Lam (oleklam@gmail.com), National ICT Australia - Queensland Research Laboratory
*/
package com.app.utils;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import com.app.exception.IncorrectNoOfArgumentsException;
public class DateTime {
private static SimpleDateFormat FILE_TIMESTAMP_FORMATTER = new SimpleDateFormat("_yyyyMMdd_HHmmss");
private static final int[] DAYS_IN_MONTH = { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
public static String getCurrentTimeAsFileTimestamp() {
Date currentTime = Calendar.getInstance().getTime();
return FILE_TIMESTAMP_FORMATTER.format(currentTime);
}
public static Calendar getCurrentDateTime() {
return Calendar.getInstance();
}
public static Calendar getDate(int year, int month, int dayOfMonth) {
return getDate(year, month, dayOfMonth, 0, 0, 0);
}
public static Calendar getDate(int year, int month, int dayOfMonth, int hourOfDay, int minute) {
return getDate(year, month, dayOfMonth, hourOfDay, minute, 0);
}
public static Calendar getDate(int year, int month, int dayOfMonth, int hourOfDay, int minute, int second) {
return new GregorianCalendar(year, month, dayOfMonth, hourOfDay, minute, second);
}
public static Calendar getToday() {
Calendar cal = new GregorianCalendar();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
return cal;
}
/**
* Verify the input time values are validate.
*
* @param args an array of input string representing the hour-min-sec of a particular time
* @return validated date time values
* @throws Exception Throws when the inputed value is not valid
* @see #verifyDateArguments(String[])
* @see #verifyDateTimeArguments(String[])
*/
public static String[] verifyTimeArguments(String[] args) throws Exception {
if (null == args || args.length != 3) throw new IncorrectNoOfArgumentsException(3);
String[] t = new String[3];
int hour = Integer.parseInt(args[0]);
int min = Integer.parseInt(args[1]);
int ms = Integer.parseInt(args[2]);
if (hour < 0 || hour > 23) throw new IllegalArgumentException("hour exceed range, [" + hour + "]");
if (min < 0 || min > 60) throw new IllegalArgumentException("minute exceed range, [" + min + "]");
if (ms < 0 || ms > 1000) throw new IllegalArgumentException("mini-second exceed range, [" + ms + "]");
t[0] = "" + hour;
t[1] = "" + min;
t[2] = "" + ms;
return t;
}
/**
* Verify the input date values are validate.
*
* @param args an array of input string representing the year-month-day of a particular time
* @return validated date time values
* @throws Exception Throws when the inputed value is not valid
* @see #verifyTimeArguments(String[])
* @see #verifyDateTimeArguments(String[])
*/
public static String[] verifyDateArguments(String[] args) throws Exception {
if (null == args || args.length != 3) throw new IncorrectNoOfArgumentsException(3);
int year = Integer.parseInt(args[0]);
if (year < 0) throw new IllegalArgumentException("month value [" + year + "] exceed range");
int month = Integer.parseInt(args[1]);
if (month < 1 || month > 12) throw new IllegalArgumentException("month value [" + month + "] exceed range");
int days = Integer.parseInt(args[2]);
if (days < 1 || days > DAYS_IN_MONTH[month]) throw new IllegalArgumentException("days in month value [" + days + "] exceed range");
String[] d = new String[6];
d[0] = "" + year;
d[1] = "" + month;
d[2] = "" + days;
return d;
}
/**
* Verify the input date time values are validate.
*
* @param args an array of input string representing the year-month-day-hour-min-sec of a particular time
* @return validated date time values
* @throws Exception Throws when the inputed value is not valid
* @see #verifyDateArguments(String[])
* @see #verifyTimeArguments(String[])
*/
public static String[] verifyDateTimeArguments(String[] args) throws Exception {
if (null == args) throw new IncorrectNoOfArgumentsException(3);
if (!(args.length == 3 || args.length == 6)) throw new IncorrectNoOfArgumentsException("3 or 6");
String d[] = verifyDateArguments(new String[] { args[0], args[1], args[2] });
String t[] = (args.length == 6) ? verifyTimeArguments(new String[] { args[3], args[4], args[5] }) : new String[] { "0", "0", "0" };
String[] dt = new String[6];
for (int i = 0; i < 3; i++) {
dt[i] = d[i];
dt[i + 3] = t[i];
}
return dt;
}
}