2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ミリ秒が四捨五入されて日付が繰り上がってしまう問題

Last updated at Posted at 2022-03-22

目次

何が起こったのか
原因
解決策

何が起こったのか

openpyxlを使ってExcelに日付を出力(表示形式: yyyy-m-d)したところ、データベースの値(期待値)と異なる結果になってしまった。

・Excel
image.png

・データベース(期待値)
image.png

このようにデータベース上は 2022/3/21 なのにも関わらず、Excelに出力された日付は 2022/3/22 となっており、日付が繰り上がってしまっている。

原因

日付のミリ秒が500ms以上だった場合、Excelの仕様で四捨五入されてしまうから。
データベースの値をよく見ると、ミリ秒が付いている。
ms.png
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を指定


結果、、、
image.png

正しく表示された🎉

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?