Ответ 1
Создайте DateTimeProvider
чтобы указать текущее время, которое будет использоваться при аудите:
@Component("dateTimeProvider")
public class CustomDateTimeProvider implements DateTimeProvider {
@Override
public Optional<TemporalAccessor> getNow() {
return Optional.of(ZonedDateTime.now());
}
}
А потом:
- Ссылка на компонент
DateTimeProvider
в аннотации@EnableMongoAuditing
; - Создать
Converter
дляDate
иZonedDateTime
; - Добавьте экземпляры
Converter
экземплярMongoCustomConversions
; -
MongoCustomConversions
экземплярMongoCustomConversions
как@Bean
.
@Configuration
@EnableMongoAuditing(dateTimeProviderRef = "dateTimeProvider")
public class MongoConfiguration {
@Bean
public MongoCustomConversions customConversions() {
List<Converter<?, ?>> converters = new ArrayList<>();
converters.add(new DateToZonedDateTimeConverter());
converters.add(new ZonedDateTimeToDateConverter());
return new MongoCustomConversions(converters);
}
class DateToZonedDateTimeConverter implements Converter<Date, ZonedDateTime> {
@Override
public ZonedDateTime convert(Date source) {
return source == null ? null :
ZonedDateTime.ofInstant(source.toInstant(), ZoneId.systemDefault());
}
}
class ZonedDateTimeToDateConverter implements Converter<ZonedDateTime, Date> {
@Override
public Date convert(ZonedDateTime source) {
return source == null ? null : Date.from(source.toInstant());
}
}
}
Однако я бы не стал использовать ZonedDateTime
для этой цели. Желательно придерживаться OffsetDateTime
:
OffsetDateTime
,ZonedDateTime
иInstant
все хранят момент времени на временнойZonedDateTime
с точностью до наносекунды. Мгновенное является самым простым, просто представляющим момент.OffsetDateTime
добавляет кOffsetDateTime
смещение от UTC/Гринвич, что позволяет получить местную дату-время.ZonedDateTime
добавляет полные правила часовых поясов.Предполагается, что
ZonedDateTime
илиInstant
используется для моделирования данных в более простых приложениях. Этот класс может использоваться при более подробном моделировании концепций даты и времени или при обмене данными с базой данных или в сетевом протоколе.