#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.
-
Это не имеет ничего общего со смещением часового пояса, используемым сервером. Все время сохраняется в UTC в MongoDB.
-
Это полностью отличается от смещения часового пояса, используемого приложениями, использующими MongoDB. У каждого языка / среды программирования есть свои собственные способы установки смещения часового пояса.
Вам следует изучить, как настроить смещение часового пояса в вашем приложении.
Комментарии:
1. нормально ли, что mongodb сокращает 210 минут с моего местного времени для сохранения в качестве времени utc? если все в порядке, в чем разница с другим сервером mongodb, который не похож на действие !?