目次
何が起こったのか
openpyxlを使ってExcelに日付を出力(表示形式: yyyy-m-d)したところ、データベースの値(期待値)と異なる結果になってしまった。
このようにデータベース上は 2022/3/21 なのにも関わらず、Excelに出力された日付は 2022/3/22 となっており、日付が繰り上がってしまっている。
原因
日付のミリ秒が500ms以上だった場合、Excelの仕様で四捨五入されてしまうから。
データベースの値をよく見ると、ミリ秒が付いている。
openpyxlでExcelに書き込む際、Excelの日付の仕様でこのミリ秒が四捨五入されてしまい「1秒」になってしまう。つまり、2022/3/21 23:59:59 + 1秒 = 2022/3/22 0:00:00 というわけだ。
・ミリ秒が500以上の場合 → 1秒プラスで日付が繰り上がってしまい 2022/3/22 で出力されてしまう
・ミリ秒が500未満の場合 → 0秒プラスで日付は繰り上がらず 2022/3/21 で出力される
解決策
openpyxlで日付を書き込む際にミリ秒を切り捨てる
セル.value = 日付.replace(microsecond=1)
microsecondを0で置き換えるとエクセルの表示がバグるらしいので1を指定
正しく表示された🎉