springboot LocalDateTime 时间转换问题
时间: 2023-10-14 15:28:59 浏览: 101
Spring Boot 将yyyy-MM-dd格式的文本字符串直接转换为LocalDateTime出现的问题
5星 · 资源好评率100%
在 Spring Boot 中使用 LocalDateTime 进行时间转换时,需要注意以下几点:
1. LocalDateTime 与数据库的时间类型转换:在使用 LocalDateTime 与数据库进行交互时,需要将 LocalDateTime 转换为对应的数据库时间类型,如 MySQL 中的 DATETIME 或 TIMESTAMP。可以使用 JPA 中的 @Convert 注解或自定义 Converter 进行转换。
2. LocalDateTime 与 JSON 数据的转换:在使用 Spring Boot 进行 Web 开发时,需要将 LocalDateTime 转换为 JSON 数据,或将 JSON 数据转换为 LocalDateTime。可以使用 Jackson 库中的 @JsonFormat 注解或自定义 JsonSerializer 和 JsonDeserializer 进行转换。
3. LocalDateTime 的时区问题:在使用 LocalDateTime 进行时间转换时,需要考虑时区的问题。可以使用时区相关的类如 ZoneId 和 ZonedDateTime 进行转换。
示例代码:
将 LocalDateTime 转换为数据库时间类型:
```java
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@Convert(converter = LocalDateTimeConverter.class)
private LocalDateTime createTime;
// getter 和 setter
}
@Converter
public class LocalDateTimeConverter implements AttributeConverter<LocalDateTime, Timestamp> {
@Override
public Timestamp convertToDatabaseColumn(LocalDateTime localDateTime) {
return localDateTime == null ? null : Timestamp.valueOf(localDateTime);
}
@Override
public LocalDateTime convertToEntityAttribute(Timestamp timestamp) {
return timestamp == null ? null : timestamp.toLocalDateTime();
}
}
```
将 LocalDateTime 转换为 JSON 数据:
```java
@RestController
public class UserController {
@GetMapping("/users")
public List<User> getUsers() {
List<User> users = new ArrayList<>();
users.add(new User(1L, "Tom", LocalDateTime.of(2021, 8, 1, 12, 0, 0)));
users.add(new User(2L, "Jerry", LocalDateTime.of(2021, 8, 2, 12, 0, 0)));
return users;
}
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) {
return new User(id, "Tom", LocalDateTime.of(2021, 8, 1, 12, 0, 0));
}
// 自定义 JsonSerializer 和 JsonDeserializer
@GetMapping("/users/{id}/detail")
public UserDetail getUserDetail(@PathVariable Long id) {
return new UserDetail(id, "Tom", LocalDateTime.of(2021, 8, 1, 12, 0, 0));
}
public static class UserDetail {
private Long id;
private String name;
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonSerialize(using = LocalDateTimeSerializer.class)
private LocalDateTime createTime;
// getter 和 setter
}
public static class LocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> {
@Override
public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
String str = p.getText();
return LocalDateTime.parse(str, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
}
}
public static class LocalDateTimeSerializer extends JsonSerializer<LocalDateTime> {
@Override
public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeString(value.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
}
}
}
```
阅读全文