ぱいそん datetime
# python
# datetime
# openpyxl
むかしむかし
YouTube動画を見ながら
書いた
pythonすくりぷと
を
【chatGPT】様に
点検してもらった
結論:動くけど・・・古いw
# ==== むかしながらの記述
# ==== じじぃ~流
# ==== import
from datetime import datetime
from datetime import date
import datetime
# ==== datetime 設定(?)
now = datetime.datetime.now()
print('作成年月日')
print('{0:%Y-%m-%d %H:%M}'.format(now)) #test_2017-09-10 10:12
date_now = ('{0:%Y/%m/%d}'.format(now)) #test_2017-09-10 10:12
time_now = ('{0:%H:%M}'.format(now)) #test_2017-09-10 10:12
# ==== openpyxlでの 実装方法
title_no = max_row-1
ws.cell(row=(max_row)+2,column=2).value= date_now + " " + time_now
※座標は 適当
# ==============================
# ==== 【chatGPT】様 の 監修
ありますありますw
ただし、昔のコードとしては普通に動くし、考え方も間違っていません。
今の Python で見ると、いくつか「ここは整理できるな」というポイントがあり
ます。
① `datetime` を二重に import している
現在は、
```python
from datetime import datetime
from datetime import date
import datetime
```
となっています。
これはちょっと混乱しやすいです。
特に、
```python
from datetime import datetime
```
と
```python
import datetime
```
は、同じ `datetime` という名前を別物として使うことになるので、どちらか一
方で十分です。
今回の書き方なら、
```python
import datetime
now = datetime.datetime.now()
```
でOK。
あるいは、
```python
from datetime import datetime
now = datetime.now()
```
でもOKです。
② `format()` を使っているところ
ここですね。
```python
date_now = ('{0:%Y/%m/%d}'.format(now))
time_now = ('{0:%H:%M}'.format(now))
```
これも正しいです。
ただ、今なら f-string を使って、
```python
date_now = f'{now:%Y/%m/%d}'
time_now = f'{now:%H:%M}'
```
と書くほうがスッキリします。
さらに今回の用途なら、そもそも変数を2個に分けなくても、
```python
date_time_now = f'{now:%Y/%m/%d %H:%M}'
```
で一発です。
③ openpyxlへの書き込み
これは問題ありません。
```python
ws.cell(row=max_row+2, column=2).value = date_now + " " + time_now
```
ちゃんと、
> 2026/08/22 11:59
のような文字列としてExcelに入ります。
ただし、ここには一つ重要な違いがあります。
今のコードは、
Pythonの datetime → 文字列 → Excel
です。
つまりExcelから見ると「日付」ではなく、ただの文字です。
④ 実は openpyxl なら datetime をそのまま入れられる
ここが今回いちばん面白いところです。
例えば、
```python
import datetime
now = datetime.datetime.now()
ws.cell(row=max_row+2, column=2).value = now
```
これだけでもOKです。
そしてExcel側で表示形式を指定します。
```python
ws.cell(row=max_row+2, column=2).number_format = 'yyyy/mm/dd hh:mm'
```
するとExcel上では、
2026/08/22 11:59
のように表示できます。
こちらの場合は、
> Pythonの datetime
> ↓
> Excelの「日時データ」
として入ります。
なので、Excelで後から
* 日付で並べ替える
* 日時の差を計算する
* 日付を比較する
* `YEAR()` や `MONTH()` などを使う
といったことができます。
⑤ したがって、今回の用途なら
もし目的が単純に
> 「Excelに作成年月日・時刻を記録したい」
だけなら、昔のコードでも十分です。
```python
import datetime
now = datetime.datetime.now()
ws.cell(row=max_row+2, column=2).value = now
ws.cell(row=max_row+2, column=2).number_format = 'yyyy/mm/dd hh:mm'
```
これがかなり素直です。
そして、昔のコードの「つっこみどころ」を一言で言うと
datetimeそのものは全然問題なし。
むしろ、
```python
date_now
time_now
```
を作って、
```python
date_now + " " + time_now
```
としている部分は、
> 「Excelに見た目どおりの文字を表示する」
という目的なら正解。
でも、
> 「Excelの日時データとして扱いたい」
なら、わざわざ文字列に変換せず、
```python
ws.cell(...).value = now
```
と datetimeオブジェクトを直接渡す
ほうがopenpyxlらしい、という感じです。
あと、これ↓
```python
title_no = max_row-1
```
は今回のコードでは使われていないので、昔の「何かの名残」っぽいですねw
「datetimeを使うこと自体は昔のコードでも全然アリ。ただ、現在ならもっと短
く書ける」
という評価でよいと思います。
# ==============================