从 Date 到 LocalDatetime 的 Mapstruct 转换

Mapstruct conversion from Date to LocalDatetime

我正在尝试使用具有日期 (java.util.Date) 字段的 Mapstruct 映射器将对象转换为具有 LocalDateTime 字段的对象。问题是它映射了错误的时间,因为在具有 LocalDateTime 字段的对象中它总是说少了 2 小时。

@Mapping(source = "createdDate", target = "createdLocalDateTime")
ObjectA toEntity(ObjectB);

我认为问题出在自动执行上:

if ( createdDate!= null ) {
        objectA.createdLocalDateTime( LocalDateTime.ofInstant( createdDate.toInstant(), ZoneId.of( "UTC" ) ) );
    }

我该如何解决这个问题?谢谢!

基本转换为

 Date date= new Date();
 LocalDateTime localdate= date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();

由于您尚未发布转换代码,我们不知道您这边发生了什么。

已经有 a conversation about this on the mapstruct issues tracker。那里说丢了一天,但是原因和解决方法都差不多:

The solution that you can do and is super trivial is to provide you own way of mapping between Date to LocalDate.

e.g.

public class DateUtils {

    public static LocalDate toLocalDate(Date date) {
        return date == null ? null : date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate());
    }

}

and make sure that DateUtils is part of Mapper#uses. This way MapStruct will use your custom function to map between Date and LocalDate.