ぱいそん datetime | 60歳を迎えて、思うこと。

60歳を迎えて、思うこと。

いつの間にか、「60」という年月が経ちました。
残り少ないか多いか?わかりませんが。
じじぃ~の「ひとりごと」を細々と続けられれば。。。

ぱいそん 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を使うこと自体は昔のコードでも全然アリ。ただ、現在ならもっと短
く書ける」
という評価でよいと思います。
# ==============================