You have 2 options to achieve what you are looking for.
First option:
Use the new @Context
annotation from 1.2.0.Final for the timeZone
property and define your own method that would perform the mapping. Something like:
public interface MyMapper {
@Mapping(target = "start", source = "startDate")
Target map(Source source, @Context TimeZone timeZone);
default LocalDateTime fromInstant(Instant instant, @Context TimeZone timeZone) {
return instant == null ? null : LocalDateTime.ofInstant(instant, timeZone.toZoneId());
}
}
MapStruct will then use the provided method to perform mapping between Instant
and LocalDateTime
.
The second option:
public interface MyMapper {
@Mapping(target = "start", expression = "java(LocalDateTime.ofInstant(source.getStartDate(), timezone.toZoneId()))")
Target map(Source source, TimeZone timeZone);
}
My personal option would be to use the first one