mirror of
https://github.com/mitb-archive/filebot
synced 2024-08-13 17:03:45 -04:00
125 lines
2.8 KiB
Java
125 lines
2.8 KiB
Java
package net.filebot.web;
|
|
|
|
import java.io.Serializable;
|
|
import java.time.Instant;
|
|
import java.time.LocalDate;
|
|
import java.time.ZoneId;
|
|
import java.time.format.DateTimeFormatter;
|
|
import java.time.temporal.ChronoField;
|
|
import java.time.temporal.Temporal;
|
|
import java.util.Locale;
|
|
import java.util.Objects;
|
|
import java.util.regex.Matcher;
|
|
import java.util.regex.Pattern;
|
|
|
|
public class SimpleDate implements Serializable, Comparable<Object> {
|
|
|
|
protected int year;
|
|
protected int month;
|
|
protected int day;
|
|
|
|
public SimpleDate() {
|
|
// used by deserializer
|
|
}
|
|
|
|
public SimpleDate(int year, int month, int day) {
|
|
this.year = year;
|
|
this.month = month;
|
|
this.day = day;
|
|
}
|
|
|
|
public SimpleDate(Temporal date) {
|
|
this(date.get(ChronoField.YEAR), date.get(ChronoField.MONTH_OF_YEAR), date.get(ChronoField.DAY_OF_MONTH));
|
|
}
|
|
|
|
public SimpleDate(long t) {
|
|
this(Instant.ofEpochMilli(t).atZone(ZoneId.systemDefault()));
|
|
}
|
|
|
|
public int getYear() {
|
|
return year;
|
|
}
|
|
|
|
public int getMonth() {
|
|
return month;
|
|
}
|
|
|
|
public int getDay() {
|
|
return day;
|
|
}
|
|
|
|
@Override
|
|
public boolean equals(Object obj) {
|
|
if (obj instanceof SimpleDate) {
|
|
SimpleDate other = (SimpleDate) obj;
|
|
return year == other.year && month == other.month && day == other.day;
|
|
} else if (obj instanceof CharSequence) {
|
|
return toString().equals(obj.toString());
|
|
}
|
|
|
|
return super.equals(obj);
|
|
}
|
|
|
|
@Override
|
|
public int compareTo(Object other) {
|
|
if (other instanceof SimpleDate) {
|
|
return compareTo((SimpleDate) other);
|
|
} else if (other instanceof CharSequence) {
|
|
SimpleDate otherDate = parse(other.toString());
|
|
if (otherDate != null) {
|
|
return compareTo(otherDate);
|
|
}
|
|
}
|
|
|
|
throw new IllegalArgumentException(String.valueOf(other));
|
|
}
|
|
|
|
public int compareTo(SimpleDate other) {
|
|
return Long.compare(getTimeStamp(), other.getTimeStamp());
|
|
}
|
|
|
|
@Override
|
|
public int hashCode() {
|
|
return Objects.hash(year, month, day);
|
|
}
|
|
|
|
@Override
|
|
public SimpleDate clone() {
|
|
return new SimpleDate(year, month, day);
|
|
}
|
|
|
|
public String format(String pattern) {
|
|
return DateTimeFormatter.ofPattern(pattern, Locale.ENGLISH).format(toLocalDate());
|
|
}
|
|
|
|
public LocalDate toLocalDate() {
|
|
return LocalDate.of(year, month, day);
|
|
}
|
|
|
|
public Instant toInstant() {
|
|
return toLocalDate().atStartOfDay(ZoneId.systemDefault()).toInstant();
|
|
}
|
|
|
|
public long getTimeStamp() {
|
|
return toInstant().toEpochMilli();
|
|
}
|
|
|
|
@Override
|
|
public String toString() {
|
|
return String.format("%04d-%02d-%02d", year, month, day);
|
|
}
|
|
|
|
public static SimpleDate parse(String date) {
|
|
if (date != null && date.length() > 0) {
|
|
Matcher m = DATE_FORMAT.matcher(date);
|
|
if (m.matches()) {
|
|
return new SimpleDate(Integer.parseInt(m.group(1)), Integer.parseInt(m.group(2)), Integer.parseInt(m.group(3)));
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public static final Pattern DATE_FORMAT = Pattern.compile("(\\d{4})\\D(\\d{1,2})\\D(\\d{1,2})");
|
|
|
|
}
|