2010-10-23 08:47:43 -04:00
|
|
|
|
|
|
|
package net.sourceforge.filebot.web;
|
|
|
|
|
|
|
|
|
|
|
|
import static java.util.Calendar.*;
|
|
|
|
|
|
|
|
import java.io.Serializable;
|
|
|
|
import java.text.ParseException;
|
|
|
|
import java.text.SimpleDateFormat;
|
2010-10-24 12:33:38 -04:00
|
|
|
import java.util.Arrays;
|
2010-10-23 08:47:43 -04:00
|
|
|
import java.util.Calendar;
|
|
|
|
import java.util.GregorianCalendar;
|
|
|
|
import java.util.Locale;
|
|
|
|
import java.util.logging.Level;
|
|
|
|
import java.util.logging.Logger;
|
|
|
|
|
|
|
|
|
|
|
|
public class Date implements Serializable {
|
|
|
|
|
|
|
|
private int year;
|
|
|
|
private int month;
|
|
|
|
private int day;
|
|
|
|
|
2012-10-09 09:30:32 -04:00
|
|
|
|
2010-10-23 08:47:43 -04:00
|
|
|
protected Date() {
|
|
|
|
// used by serializer
|
|
|
|
}
|
|
|
|
|
2012-10-09 09:30:32 -04:00
|
|
|
|
2010-10-23 08:47:43 -04:00
|
|
|
public Date(int year, int month, int day) {
|
|
|
|
this.year = year;
|
|
|
|
this.month = month;
|
|
|
|
this.day = day;
|
|
|
|
}
|
|
|
|
|
2012-10-09 09:30:32 -04:00
|
|
|
|
2010-10-23 08:47:43 -04:00
|
|
|
public int getYear() {
|
|
|
|
return year;
|
|
|
|
}
|
|
|
|
|
2012-10-09 09:30:32 -04:00
|
|
|
|
2010-10-23 08:47:43 -04:00
|
|
|
public int getMonth() {
|
|
|
|
return month;
|
|
|
|
}
|
|
|
|
|
2012-10-09 09:30:32 -04:00
|
|
|
|
2010-10-23 08:47:43 -04:00
|
|
|
public int getDay() {
|
|
|
|
return day;
|
|
|
|
}
|
|
|
|
|
2012-10-09 09:30:32 -04:00
|
|
|
|
|
|
|
public long getTimeStamp() {
|
|
|
|
return new GregorianCalendar(year, month, day).getTimeInMillis();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2010-10-24 12:33:38 -04:00
|
|
|
@Override
|
|
|
|
public boolean equals(Object obj) {
|
|
|
|
if (obj instanceof Date) {
|
|
|
|
Date other = (Date) obj;
|
|
|
|
return year == other.year && month == other.month && day == other.day;
|
|
|
|
}
|
|
|
|
|
2011-10-01 00:08:46 -04:00
|
|
|
return super.equals(obj);
|
2010-10-24 12:33:38 -04:00
|
|
|
}
|
|
|
|
|
2012-10-09 09:30:32 -04:00
|
|
|
|
2010-10-24 12:33:38 -04:00
|
|
|
@Override
|
|
|
|
public int hashCode() {
|
|
|
|
return Arrays.hashCode(new Object[] { year, month, day });
|
|
|
|
}
|
|
|
|
|
2012-10-09 09:30:32 -04:00
|
|
|
|
2010-10-23 08:47:43 -04:00
|
|
|
@Override
|
|
|
|
public String toString() {
|
|
|
|
return String.format("%04d-%02d-%02d", year, month, day);
|
|
|
|
}
|
|
|
|
|
2012-10-09 09:30:32 -04:00
|
|
|
|
2010-10-23 08:47:43 -04:00
|
|
|
public String format(String pattern) {
|
2011-11-14 04:24:06 -05:00
|
|
|
return format(pattern, Locale.ROOT);
|
|
|
|
}
|
|
|
|
|
2012-10-09 09:30:32 -04:00
|
|
|
|
2011-11-14 04:24:06 -05:00
|
|
|
public String format(String pattern, Locale locale) {
|
|
|
|
return new SimpleDateFormat(pattern, locale).format(new GregorianCalendar(year, month - 1, day).getTime()); // Calendar months start at 0
|
2010-10-23 08:47:43 -04:00
|
|
|
}
|
|
|
|
|
2012-10-09 09:30:32 -04:00
|
|
|
|
2010-10-23 08:47:43 -04:00
|
|
|
public static Date parse(String string, String pattern) {
|
2011-08-08 13:37:45 -04:00
|
|
|
if (string == null || string.isEmpty())
|
|
|
|
return null;
|
|
|
|
|
2010-10-23 08:47:43 -04:00
|
|
|
SimpleDateFormat formatter = new SimpleDateFormat(pattern, Locale.ROOT);
|
|
|
|
formatter.setLenient(false); // enable strict mode (e.g. fail on invalid dates like 0000-00-00)
|
|
|
|
|
|
|
|
try {
|
|
|
|
Calendar date = new GregorianCalendar(Locale.ROOT);
|
|
|
|
date.setTime(formatter.parse(string));
|
2010-10-24 12:33:38 -04:00
|
|
|
return new Date(date.get(YEAR), date.get(MONTH) + 1, date.get(DAY_OF_MONTH)); // Calendar months start at 0
|
2010-10-23 08:47:43 -04:00
|
|
|
} catch (ParseException e) {
|
|
|
|
// no result if date is invalid
|
|
|
|
Logger.getLogger(Date.class.getName()).log(Level.WARNING, e.getMessage());
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|