com.hubspot.jinjava.objects.date.PyishDate Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jinjava Show documentation
Show all versions of jinjava Show documentation
Jinja templating engine implemented in Java
package com.hubspot.jinjava.objects.date;
import com.hubspot.jinjava.objects.PyWrapper;
import org.apache.commons.lang3.math.NumberUtils;
import java.io.Serializable;
import java.time.Instant;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.temporal.ChronoField;
import java.util.Date;
import java.util.Objects;
import java.util.Optional;
/**
* an object which quacks like a python date
*
* @author jstehler
*
*/
public final class PyishDate extends Date implements Serializable, PyWrapper {
private static final long serialVersionUID = 1L;
private final ZonedDateTime date;
public PyishDate(ZonedDateTime dt) {
super(dt.toInstant().toEpochMilli());
this.date = dt;
}
public PyishDate(Date d) {
this(ZonedDateTime.ofInstant(d.toInstant(), ZoneOffset.UTC));
}
public PyishDate(String publishDateStr) {
this(NumberUtils.toLong(Objects.requireNonNull(publishDateStr), 0L));
}
public PyishDate(Long epochMillis) {
this(ZonedDateTime.ofInstant(Instant.ofEpochMilli(
Optional.ofNullable(epochMillis).orElseGet(System::currentTimeMillis)), ZoneOffset.UTC));
}
public PyishDate(Instant instant) {
this(ZonedDateTime.ofInstant(instant, ZoneOffset.UTC));
}
public String isoformat() {
return strftime("yyyy-MM-dd");
}
public String strftime(String fmt) {
return StrftimeFormatter.format(date, fmt);
}
@SuppressWarnings("deprecation")
@Override
public int getYear() {
return date.getYear();
}
@SuppressWarnings("deprecation")
@Override
public int getMonth() {
return date.getMonthValue();
}
@SuppressWarnings("deprecation")
@Override
public int getDay() {
return date.getDayOfMonth();
}
public int getHour() {
return date.getHour();
}
public int getMinute() {
return date.getMinute();
}
public int getSecond() {
return date.getSecond();
}
public int getMicrosecond() {
return date.get(ChronoField.MILLI_OF_SECOND);
}
public Date toDate() {
return Date.from(date.toInstant());
}
public ZonedDateTime toDateTime() {
return date;
}
@Override
public String toString() {
return strftime("yyyy-MM-dd HH:mm:ss");
}
@Override
public int hashCode() {
return Objects.hashCode(date);
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
PyishDate that = (PyishDate) obj;
return Objects.equals(toDateTime(), that.toDateTime());
}
}