Mongoid 1.month.a go возвращается 01 за 1 марта - PullRequest
0 голосов
/ 02 марта 2020

У меня есть приложение ROR: ruby 2.3.0, рельсы 4.2.5.1 и mongoid 5.0, и в одной из моих моделей у меня есть: field: Statement_month, по умолчанию: 1.month.a go .strftime ( '% m'), но только 1 марта сохраняет неправильный результат: "01" вместо "02". У меня нет проблем в другие месяцы в первый день месяца. Я также добавил несколько журналов, before_create и after_create, напечатав: "------- 1_month_ago_month ------------------------" + 1.month .a go .strftime ('% m') => в журналах отображается «02», а в объекте БД - «01». Это проблема mongoid, или, возможно, проблема TimeZone?

1 Ответ

0 голосов
/ 03 марта 2020

Правильный синтаксис для Dynami c по умолчанию использует Procs. См. https://docs.mongodb.com/mongoid/master/tutorials/mongoid-documents/#defaults.

MongoDB хранит время как метки времени UT C, ваша программа явно не конвертируется в UT C, таким образом, это 1) потенциально неправильно работает по отношению к часовым поясам и 2) потенциально плохое поведение в отношении летнего времени. Математика даты обычно должна выполняться явно по местному времени (и вы должны знать часовой пояс, в котором вы работаете) или в UT C. Смешивание этих двух в конечном итоге приводит к проблемам.

Чтобы устранить неисправность в неправильном месяце, установите системное время на 1 марта и отладьте программу. В частности, попробуйте 1 марта 01:00 и 1 марта 23:00. Это часто разные даты в UT C для одной и той же локальной даты.

...