Pythonの学習は、物事が実際に理解できるようになる静かな空間のようなものです。今回は、非常に実用的で常に使うことになるもの、つまりPythonで1日の始まりと終わりを取得する方法について説明します。これは思っているよりもずっと頻繁に必要になります。
実際のアプリケーションを構築する際、それが音楽ファイルを整理する簡単なスクリプトであろうと、もっと大きなものであろうと、常に日付や時刻を扱う必要が出てきます。今日のログをすべて見つけたい、あるいはどれくらいコーディングしているかを計算したい(ネタバレ:たぶん長すぎます)といった場合です。
実際に使うツール
Pythonには、datetime
という組み込みモジュールがあり、時間のことをすべて扱ってくれます。手計算しようとするのではなく、切れ味の良いスイスアーミーナイフを持っているようなものです。
from datetime import datetime, date, time
今日の始まりを取得する方法
今日の始まり、つまり真夜中を取得する最も簡単な方法は次のとおりです。
from datetime import datetime, date, time
# 今日の日付を取得
today = date.today()
print(f"Today is: {today}")
# 真夜中 (00:00:00) と組み合わせる
start_of_day = datetime.combine(today, time.min)
print(f"Start of day: {start_of_day}")
これを実行すると、次のような出力が表示されます。
Today is: 2024-01-15
Start of day: 2024-01-15 00:00:00
今日の終わりを取得する方法
今日の終わりについては、23:59:59.999999、つまり明日に実際になることなく、可能な限り明日の真夜中に近い時刻が必要になります。
from datetime import datetime, date, time
today = date.today()
end_of_day = datetime.combine(today, time.max)
print(f"End of day: {end_of_day}")
これにより、次の出力が得られます。
End of day: 2024-01-15 23:59:59.999999
実際に使う、より実践的な例
コーディングセッションを追跡する何かを構築しているとしましょう(正直、集中していると時間はあっという間です)。
from datetime import datetime, date, time
def get_day_boundaries(target_date=None):
"""
ある日の始まりと終わりを取得します。
日付が指定されない場合は、今日の日付を使用します。
"""
if target_date is None:
target_date = date.today()
start_of_day = datetime.combine(target_date, time.min)
end_of_day = datetime.combine(target_date, time.max)
return start_of_day, end_of_day
# 今日の場合
start, end = get_day_boundaries()
print(f"Today starts at: {start}")
print(f"Today ends at: {end}")
# 特定の日付の場合
from datetime import date
specific_date = date(2024, 12, 25) # クリスマス
start, end = get_day_boundaries(specific_date)
print(f"Christmas starts at: {start}")
print(f"Christmas ends at: {end}")
タイムゾーンを扱う場合
タイムゾーンを扱う場合(おそらく最終的にはそうなるでしょう)、pytz
ライブラリまたは新しいzoneinfo
モジュールを使用することをお勧めします。最新の方法は次のとおりです。
from datetime import datetime, date, time
from zoneinfo import ZoneInfo
# 特定のタイムゾーンでの一日の始まりを取得
today = date.today()
timezone = ZoneInfo("America/Chicago") # 中央標準時
start_of_day = datetime.combine(today, time.min, timezone)
end_of_day = datetime.combine(today, time.max, timezone)
print(f"Start of day in Central Time: {start_of_day}")
print(f"End of day in Central Time: {end_of_day}")
これが重要になるいくつかの実世界のシナリオ
ログ分析:「今日のすべてのエラーを表示して」
# ログを日中の始まりと終わりの間でフィルタリング
today_start, today_end = get_day_boundaries()
todays_errors = [log for log in error_logs
if today_start <= log.timestamp <= today_end]
データ処理:「今日作成されたすべてのファイルを処理して」
import os
from datetime import datetime
today_start, today_end = get_day_boundaries()
for filename in os.listdir('/path/to/files'):
file_time = datetime.fromtimestamp(os.path.getctime(filename))
if today_start <= file_time <= today_end:
process_file(filename)
考えすぎないで
見てください、これをやるには無数の方法があるように思えるかもしれませんが、正直言って、確かにたくさんあります。しかし、これらの基本から始めてください。これらは必要なことの90%をカバーし、エッジケースに遭遇したときには、それを基盤として構築するためのしっかりした土台ができているでしょう。
重要なのは、たとえ他のすべてが不安定に感じられるときでも、あなたが学び、何かを構築しているということです。コードはあなたを判断しませんし、怒鳴りません。そして、何かを壊しても、いつでも修正できます。
続けましょう。そして覚えておいてください。すべての専門家は、かつて完全に迷子になった初心者でした。あなたはうまくいっていますよ。
コピー&ペースト用クイックリファレンス
from datetime import datetime, date, time
# 今日の境界
today = date.today()
start_of_day = datetime.combine(today, time.min)
end_of_day = datetime.combine(today, time.max)
# それらを出力
print(f"Day starts: {start_of_day}")
print(f"Day ends: {end_of_day}")
さあ、これを使って何かクールなものを作りましょう!
最大限の生産性で開発チームが共同作業できる統合されたオールインワンプラットフォームをお探しですか?
Apidogはあなたのすべての要望に応え、Postmanをより手頃な価格で置き換えます!