`` `11: 12: 13.14``` (Stunden: Minuten: Sekunden, Millisekunden) im String-Typ INSERT in MySQL Und wie man bis zu Millisekunden anzeigt. (Keine Datumsangabe erforderlich)
*** Ist es nicht möglich, es normal zu implementieren? *** *** Denkst du
Es funktionierte nur, wenn es einfach schien und eine mühsame Verarbeitung aufwies. .. .. Wenn jemand einen klügeren Weg kennt, würde ich mich sehr freuen, wenn Sie es mir sagen könnten! !!
Spring
build.gradle
id 'org.springframework.boot' version '2.2.2.BUILD-SNAPSHOT'
sourceCompatibility = '1.8'
runtimeOnly('mysql:mysql-connector-java')
implementation 'org.springframework.boot:spring-boot-starter'
implementation('org.springframework.boot:spring-boot-starter-web')
implementation('org.springframework.boot:spring-boot-starter-data-jpa')
MySQL 8.0
Unterstützt bis zu 3 Stellen MySQL :: MySQL 5.6 Referenzhandbuch :: 11.1.2 Datums- und Uhrzeittypübersicht
create table timesample(
...
start_time TIME(3)
);
JPA unterstützt java.time.LocalDate, java.time.LocalTime und java.time.LocalDateTime nicht als Feldtypen der Entität. Daher müssen Sie den folgenden AttributeConverter erstellen.
package app.entities.converter;
import java.time.LocalTime;
import javax.persistence.AttributeConverter;
import javax.persistence.Converter;
@Converter(autoApply = true)
public class LocalTimeConverter implements AttributeConverter<LocalTime, java.sql.Time> {
@Override
public java.sql.Time convertToDatabaseColumn(LocalTime time) {
return time == null ? null : java.sql.Time.valueOf(time);
}
@Override
public LocalTime convertToEntityAttribute(java.sql.Time value) {
return value == null ? null : value.toLocalTime();
}
}
Entity
@Column(name = "start_time")
private LocalTime startTime;
entity.setStartTime(LocalTime.of(11, 12, 13, 14*10000000));
repository.save(entity);
Es gibt keine Millisekunde!
Ändern Sie die convertToDatabaseColumn-Methode des zuvor erstellten LocalTimeConverter [So ordnen Sie die Frühlings-Millisekunde java.time.LocalTime der Millisekunde java.sql.Time zu](https://stackoverflow.com/questions/51182366/how-to-map-java-time-localtime- mit-Millisekunden-zu-einer-Java-SQL-Zeit-mit-Milisec)
LocalTimeConverter
package app.entities.converter;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalTime;
import javax.persistence.AttributeConverter;
import javax.persistence.Converter;
@Converter(autoApply = true)
public class LocalTimeConverter implements AttributeConverter<LocalTime, java.sql.Time> {
@Override
public java.sql.Time convertToDatabaseColumn(LocalTime time) {
if(time == null) return null;
//Dieses Datum wird durch Konvertierung verworfen, daher ist alles in Ordnung
long epochMilli = time.atDate(LocalDate.of(2019, 1, 1)).atZone(java.time.ZoneId.systemDefault())
.toInstant().toEpochMilli();
java.sql.Time sqlTime = new java.sql.Time(epochMilli);
return sqlTime;
}
@Override
public LocalTime convertToEntityAttribute(java.sql.Time value) {
if (value == null) return null;
String localTimeStr = new SimpleDateFormat("HH:mm:ss.SSS").format(value);
LocalTime localTime = LocalTime.parse(localTimeStr);
return localTime;
}
}
Recommended Posts