検索ガイド -Search Guide-

単語と単語を空白で区切ることで AND 検索になります。
例: python デコレータ ('python' と 'デコレータ' 両方を含む記事を検索します)
単語の前に '-' を付けることで NOT 検索になります。
例: python -デコレータ ('python' は含むが 'デコレータ' は含まない記事を検索します)
" (ダブルクオート) で語句を囲むことで 完全一致検索になります。
例: "python data" 実装 ('python data' と '実装' 両方を含む記事を検索します。'python data 実装' の検索とは異なります。)
img_for_tre_tron

Tré Thộn を食べたことがありますか?
ベトナム・ビンズオン滞在中の方は是非注文して食べてみて!
絶対に美味しいです!
ホーチミン市内へも配達可能です。お問い合わせください。

Have you ever had "Tré Thộn" before?
If you're living at Bình Dương in Vietnam, you "must" try to order and eat it.
I'm sure you're very surprised how delicious it is!!
If you're in Hồ Chí Minh, you have a chance to get it too. Please call!!
>>
python_cookbook

Python Cookbook [Converting Days to Seconds, and Other Basic Time Conversions : 日付の秒数への変換、及び、他の基本的な日時変換] 投稿一覧へ戻る

Published 2020年4月14日21:14 by mootaro23

SUPPORT UKRAINE

- Your indifference to the act of cruelty can thrive rogue nations like Russia -

# Problem:
# 日付を秒数、分数、時間に変換するような単純な日時変換を行いたい。

# Solution:
# 異なる時間ユニット間の変換や計算には datetime モジュールを利用します。
# 例えば、2つの時間の差などの時間間の計算を実行したければ timedeltaオブジェクトを使用します。

from datetime import timedelta

a = timedelta(days = 2, hours = 6)
b = timedelta(hours = 4.5)
c = a + b

c.days # → 2
c.seconds # → 37800
c.seconds / 3600 # → 10.5
c.total_seconds() / 3600 # → 58.5


# timedelta オブジェクトは内部的には days (日数)、seconds (秒数)、microseconds (マイクロ秒数) だけを保持しています。
# ですから上の例では、a と b の hours は内部的には seconds として保持されていますから、6 + 4.5 = 10.5(時間) * 3600(秒/1時間) となって c.seconds は 37800 となっています。
# また、timedelta.total_seconds は、保持している days、seconds、microseconds 全てを秒数に変換し合算した結果を返します。

# 特定の日付や時刻を表現したい場合は datetime インスタンスを作成します。標準的な演算を実行することが可能です。

from datetime import datetime

a = datetime(2020, 4, 14)
print(a + timedelta(days = 10)) # → (10日後は) 2020-04-24 00:00:00
b = datetime(2020, 5, 25)
d = b - a
d.days # → (d は timedelta オブジェクトです) 41

now = datetime.today()
print(now) # → 2020-04-14 19:59:35.507001
print(now + timedelta(minutes = 10)) # → 2020-04-14 20:09:35.507001

# datetime オブジェクトは「うるう年」に対応しています。
a = datetime(2020, 3, 1)
b = datetime(2020, 2, 28)
(a - b).days # → 2 (今年はオリンピックイヤー、だった・・・)

c = datetime(2019, 3, 1)
d = datetime(2019, 2, 28)
(c - d).days # → 1

# 日時変換に関するほとんどの問題は datetime モジュールでカバーできるかもしれませんが、より複雑なオペレーション、例えばタイムゾーンを考慮するとか、2つの時刻間経過を他の単位(year、month 等) でも取得したい、などには dateutil ライブラリ ( http://pypi.python.org/pypi/python-dateutil ) が非常に便利です。

a = datetime(2020, 4, 14)
a + timedelta(months = 1) # → TypeError: 'months' is an invalid keyword argument

from dateutil.relativedelta import relativedelta
a + relativedelta(months = +1) # → datetime.datetime(2020, 5, 14, 0, 0)

nana_birth = datetime(1994, 5, 25)

a - nana_birth # → datetime.timedelta(days=9456)

b = relativedelta(a, nana_birth)
b # → relativedelta(years=+25, months=+10, days=+20)
print('Nana は現在', b.years, '歳') # → Nana は現在 25 歳