mirror of
https://github.com/dalbodeule/snap-admin.git
synced 2025-06-09 05:48:20 +00:00
Support for Instant
type (#21)
Since `Instant` requires a timezone which is not stored/accessible from the database, all `Instant` objects are instantiated with UTC timezone by default
This commit is contained in:
parent
e52cc2877f
commit
d3f516edaf
@ -25,9 +25,11 @@ import java.math.BigInteger;
|
|||||||
import java.sql.Date;
|
import java.sql.Date;
|
||||||
import java.text.ParseException;
|
import java.text.ParseException;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.time.Instant;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.OffsetDateTime;
|
import java.time.OffsetDateTime;
|
||||||
|
import java.time.ZoneOffset;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
@ -270,6 +272,28 @@ public enum DbFieldType {
|
|||||||
return List.of(CompareOperator.AFTER, CompareOperator.STRING_EQ, CompareOperator.BEFORE);
|
return List.of(CompareOperator.AFTER, CompareOperator.STRING_EQ, CompareOperator.BEFORE);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
INSTANT {
|
||||||
|
@Override
|
||||||
|
public String getFragmentName() {
|
||||||
|
return "datetime";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object parseValue(Object value) {
|
||||||
|
if (value == null || value.toString().isBlank()) return null;
|
||||||
|
return LocalDateTime.parse(value.toString()).toInstant(ZoneOffset.UTC);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<?> getJavaClass() {
|
||||||
|
return Instant.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<CompareOperator> getCompareOperators() {
|
||||||
|
return List.of(CompareOperator.AFTER, CompareOperator.STRING_EQ, CompareOperator.BEFORE);
|
||||||
|
}
|
||||||
|
},
|
||||||
STRING {
|
STRING {
|
||||||
@Override
|
@Override
|
||||||
public String getFragmentName() {
|
public String getFragmentName() {
|
||||||
@ -626,6 +650,8 @@ public enum DbFieldType {
|
|||||||
return DATE;
|
return DATE;
|
||||||
} else if (klass == LocalDateTime.class) {
|
} else if (klass == LocalDateTime.class) {
|
||||||
return LOCAL_DATE_TIME;
|
return LOCAL_DATE_TIME;
|
||||||
|
} else if (klass == Instant.class) {
|
||||||
|
return INSTANT;
|
||||||
} else if (klass == Float.class || klass == float.class) {
|
} else if (klass == Float.class || klass == float.class) {
|
||||||
return FLOAT;
|
return FLOAT;
|
||||||
} else if (klass == Double.class || klass == double.class) {
|
} else if (klass == Double.class || klass == double.class) {
|
||||||
|
@ -19,8 +19,10 @@
|
|||||||
|
|
||||||
package tech.ailef.dbadmin.external.dbmapping;
|
package tech.ailef.dbadmin.external.dbmapping;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.OffsetDateTime;
|
import java.time.OffsetDateTime;
|
||||||
|
import java.time.ZoneId;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
@ -41,7 +43,7 @@ public class DbFieldValue {
|
|||||||
|
|
||||||
public Object getValue() {
|
public Object getValue() {
|
||||||
/*
|
/*
|
||||||
* Special handling of OffsetDateTime to be compatbile
|
* Special handling of OffsetDateTime and Instant to be compatabile
|
||||||
* with the HTML datetime-local input field: we "cast"
|
* with the HTML datetime-local input field: we "cast"
|
||||||
* it to a LocalDateTime so the toString() method will
|
* it to a LocalDateTime so the toString() method will
|
||||||
* not produce the ending "Z" which prevents the datepicker
|
* not produce the ending "Z" which prevents the datepicker
|
||||||
@ -51,6 +53,12 @@ public class DbFieldValue {
|
|||||||
return LocalDateTime.from((OffsetDateTime)value);
|
return LocalDateTime.from((OffsetDateTime)value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (value instanceof Instant) {
|
||||||
|
Instant i = (Instant)value;
|
||||||
|
LocalDateTime result = LocalDateTime.ofInstant(i, ZoneId.of("UTC"));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user