我试图使用带有日期(java.util.Date)字段的Mapstruct映射程序将对象转换为具有LocalDateTime字段的对象。问题是它映射时间错误,因为在带有LocalDateTime字段的对象中,它总是少说两个小时。
@Mapping(source = "createdDate", target = "createdLocalDateTime")
ObjectA toEntity(ObjectB);
我认为问题在于自动实现:
if ( createdDate!= null ) {
objectA.createdLocalDateTime( LocalDateTime.ofInstant( createdDate.toInstant(), ZoneId.of( "UTC" ) ) );
}
我怎么才能解决这个问题?谢谢!
发布于 2022-05-26 11:51:13
已经有在mapstruct问题跟踪器上对此进行讨论了。在那里,他们谈论失去一天,但原因和解决办法是相似的:
您可以做的并且非常简单的解决方案是提供您自己的日期到LocalDate之间映射的方式。 例如:
public class DateUtils {
public static LocalDate toLocalDate(Date date) {
return date == null ? null : date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate());
}
}
并确保DateUtils是Mapper#uses的一部分。这样,MapStruct将使用您的自定义函数在日期和LocalDate之间进行映射。
发布于 2022-05-26 10:06:17
一个基本的转换是
Date date= new Date();
LocalDateTime localdate= date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
由于您没有发布您的转换代码,我们不知道您这方面发生了什么。
https://stackoverflow.com/questions/72389940
复制相似问题