我有一个使用MongoDB作为数据库的Spring Boot 2项目。
当我通过调用LocalDateTime.now()实例化包含日期为LocalDateTime的对象时;我收到一个包含纳秒的日期时间,其中包含4个以上的数字位置。
当我使用mongotemplate.save将数据持久保存在mongoDB中时,该值仅包含3个纳秒的位置(其余位置填充为零)。那么,在存储到数据库时如何实现相同的精度?或另一个选择:在Java中创建LocalDateTime实例时如何限制精度?
@Document("Entity")
public class Entity implements Serializable {
@Id
private String id;
@Indexed(name = "created")
private LocalDateTime created;
public HistoryEntity(){
// This gives me 2020-01-30T13:25:09.817182
this.created = LocalDateTime.now();
}
}
@Repository
public class DAO {
@Autowired
private MongoTemplate mongoTemplate;
public void save(Entity e) {
// When value is persisted, I get 2020-01-30T13:25:09.817 if I look into mongoDB instance or if I retrieve the same entity from DB in Java
Entity saved = mongoTemplate.save(e);
}
}
我想我已经找到了答案,除了从Java端截断LocalDateTime之外,我别无他法(正如我在上一条评论中所解释,并在下面描述的那样)
Clock millisecondClock = Clock.tick(Clock.systemDefaultZone(), Duration.ofNanos(1000000));
LocalDateTime d = LocalDateTime.now(millisecondClock);
[当我面对以下陈述(回答了我的问题)时,我正在阅读这篇Baeldung的文章https://www.baeldung.com/spring-data-mongodb-zoneddatetime:
...我们正在删除纳秒信息,因为MongoDB Date类型的精度为毫秒:
就这样。即使我想以更高的精度工作,似乎MongoDB也无法处理它(至少现在如此)