mongodb изменяет часовой пояс базы данных

#java #mongodb #spring-mongodb

#java #mongodb #spring-mongodb

Вопрос:

Я использую spring boot и mongodb. когда я сохраняю объект в БД, он меняется на мой местный часовой пояс. это для моего mongo timezoneOffset, который равен -210, когда я запускаю эту команду на mongo: new Date().getTimezoneOffset() => -210 . проблема в запуске с производственного mongodb на другом сервере, это значение равно new Date().getTimezoneOffset() => 0 !

вопрос в том, как я могу сделать TimezoneOffset разработку, подобную производственной MongoDB?

класс Java, который я сохраняю, является:

 Class AuditDocument{

    @Id
    private String id;
    @NotNull
    private String creatorUsername;
    @CreatedDate
    private Date createDate;
}
  

документ в разработке MongoDB, дата создания которого равна -3:30 от текущего времени:

 {
    "_id" : ObjectId("5f697ee483eede29e2c13a2d"),
    "creatorUsername" : "superadmin",
    "createDate" : ISODate("2020-09-22T04:34:44.798Z"),
}
  

Комментарии:

1. ISODate("2020-09-22T04:34:44.798Z") означает время UTC, поэтому я не понимаю, почему ваш местный часовой пояс будет иметь значение. За отображение этого времени в вашем местном часовом поясе обычно отвечает ваше клиентское приложение, а не сервер.

2. @WernfriedDomscheit монго изменил его на -210 минут назад. мой местный часовой пояс равен 3:30. по умолчанию я надеюсь, что разработка mongodb в порядке, и производство должно быть изменено, потому что для предварительного просмотра данных пользователи хотят видеть свое местное время. но в этом случае TimezoneOffset моя проблема заключается только в унификации значений.

3. TimezoneOffset не является свойством MongoDB, оно определено в клиенте. Может быть, установить переменную среды, например JAVA_TOOL_OPTIONS=-Duser.timezone=Europe/Zurich

4. к сожалению, этой переменной нет на моем локальном компьютере (Windows) и в среде mongodb (linux). (команда linux: printenv JAVA_TOOL_OPTIONS => пусто)

5. Ну, тогда установите его!

Ответ №1:

new Date().getTimezoneOffset() дает вам смещение часового пояса в клиентской системе, на которой запущена оболочка mongo.

  1. Это не имеет ничего общего со смещением часового пояса, используемым сервером. Все время сохраняется в UTC в MongoDB.

  2. Это полностью отличается от смещения часового пояса, используемого приложениями, использующими MongoDB. У каждого языка / среды программирования есть свои собственные способы установки смещения часового пояса.

Вам следует изучить, как настроить смещение часового пояса в вашем приложении.

Комментарии:

1. нормально ли, что mongodb сокращает 210 минут с моего местного времени для сохранения в качестве времени utc? если все в порядке, в чем разница с другим сервером mongodb, который не похож на действие !?