【问题标题】:Spring Data save date and time in specific formatSpring Data以特定格式保存日期和时间
【发布时间】:2017-05-30 09:37:19
【问题描述】:

我不明白如何以特定格式在 MongoDB 中保存日期和时间,例如“eventDateFrom”。

我尝试这样做:

部分事件类: 公共类事件{

@Id
private String id;
private String eventTitle;

@DateTimeFormat(pattern = "MM/dd/yyyy HH:mm:ss")
private Date eventDateFrom;
private String eventDateTo;
private Integer minEventPartcipants;
private String eventDateConfirmTo;
private String location;
private String minEventTime;
private List<Participant> participantList = new ArrayList<>();

RunAtStart 类的一部分:

  Event event = new Event();

    event.setEventTitle("Wyjazd na rower Turbacz");
    event.setEventDateFrom(new Date("05/27/2017 10:00:00"));
    event.setEventDateTo("27.05.2017 22:00:00");
    event.setMinEventPartcipants(2);
    event.setEventDateConfirmTo("26.05.2017 10:00:00");
    event.setLocation("Lindego 13a");
    event.setMinEventTime("06:00:00");

但是“eventDateFrom”的时间是错误的。

MongoDB 文档:

    {
"_id" : ObjectId("592d34dcc5f2fd2d204d7db4"),
"_class" : "info.wzielezicki.app.MeetHelp.model.Event",
"eventTitle" : "Wyjazd na rower Turbacz",
"eventDateFrom" : ISODate("2017-05-27T08:00:00.000Z"),
"eventDateTo" : "27.05.2017 22:00:00",
"minEventPartcipants" : 2,
"eventDateConfirmTo" : "26.05.2017 10:00:00",
"location" : "Lindego 13a",
"minEventTime" : "06:00:00",
"participantList" : []
   }
  1. 我做错了什么?
  2. 定义日期和时间格式的更好方法是什么?

【问题讨论】:

  • 1.您正在使用字符串。 2. 是的,有更好的方法,使用 BSON 日期。在 Java 中,您提供 java.util.Date。见How to insert a document with date in mongo?
  • 看起来是时区问题。这篇文章可能会有所帮助:stackoverflow.com/questions/2891361/…
  • @jvwilge 我使用@DateTimeFormat(pattern = "MM/dd/yyyy HH:mm:ss") private Date eventDateFrom;TimeZone.setDefault(TimeZone.getTimeZone("UTC")); 现在MongoDB 中的eventDateFrom 是"eventDateFrom" : ISODate("2017-05-27T10:00:00.000Z") 你怎么看,这是正确的解决方案
  • 这取决于您的源时间是否为 UTC。波兰不是UTC,而是UTC+2。我个人更喜欢以 UTC 保存时间和日期(并在首选时区的前端显示它们),这样您就不会遇到夏令时的任何问题。
  • @jvwilge 感谢您提供信息,但我仍然有问题。我更改 eventDateFrom 的模式 @DateTimeFormat(pattern = "dd/MM/yyyy HH:mm:ss"), save event again event.setEventDateFrom(new Date("27/05/2017 10:00:00")); private Date eventDateFrom;` 现在在 MongoDB 中我可以看到` "eventDateFrom" : ISODate("2019-03-05T10:00:00.000Z"),`

标签: mongodb spring-boot spring-data spring-data-mongodb


【解决方案1】:

如果您想以特定格式存储Date 而不是商店使用的格式,您并不是真的想存储Date,而是String,所以只需将属性设为输入String。您仍然可以让其他使用 Date 的访问器在您的应用程序中使用。

【讨论】:

  • 感谢您提供信息。我想保存用户在应用程序中设置的日期。我明白,我收到并保存在数据库中的日期格式并不重要。在进行计算之前,我必须解析这种数据格式,例如 eventDateFrom - eventDateTo。我说的对吗?
  • 是的,你需要解析它。
猜你喜欢
  • 2014-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-04
  • 2015-05-14
  • 2018-02-18
  • 1970-01-01
相关资源
最近更新 更多