我正在嘗試使用具有日期(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" ) ) );
}
我怎樣才能解決這個問題?謝謝!
uj5u.com熱心網友回復:
在 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 將使用您的自定義函式在 Date 和 LocalDate 之間進行映射。
uj5u.com熱心網友回復:
一個基本的轉換將是
Date date= new Date();
LocalDateTime localdate= date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
由于您尚未發布轉換代碼,我們不知道您的情況。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/484087.html
上一篇:R:生成遵循模式的隨機日期
