日付と時刻

1. 学習内容



2. 主要な概念

PYTHON
import numpy as np

# Creating datetime arrays
dates = np.array(['2024-01-01', '2024-02-01', '2024-03-01'], dtype='datetime64')
print(dates)  # ['2024-01-01' '2024-02-01' '2024-03-01']

# Date arithmetic
print(dates + np.arange(3))  # add days

# Date range
range_dates = np.arange('2024-01-01', '2024-01-10', dtype='datetime64')
print(range_dates)

# Extract components
print(dates.astype('datetime64[Y]'))  # year
print(dates.astype('datetime64[M]'))  # month
TEXT
> Output: Run NumPy 2.x in your local Python environment to see the ndarray output. The Piston server does not have NumPy pre-installed — install it locally (`pip install numpy`) and compare. Actual values may vary by NumPy version and random seed.

(1) ▶ サンプル:日付範囲の作成(難易度 ⭐)

PYTHON
import numpy as np

# Daily range
days = np.arange('2024-01-01', '2024-01-11', dtype='datetime64')
print("Daily:", days)

# Monthly range
months = np.arange('2024-01', '2024-07', dtype='datetime64[M]')
print("Monthly:", months)

# Hourly range
hours = np.arange('2024-01-01', '2024-01-02', dtype='datetime64[h]')
print("Hourly:", hours)

出力:

TEXT
日別:['2024-01-01' '2024-01-02' '2024-01-03' '2024-01-04' '2024-01-05'
 '2024-01-06' '2024-01-07' '2024-01-08' '2024-01-09' '2024-01-10']
月別:['2024-01' '2024-02' '2024-03' '2024-04' '2024-05' '2024-06']
1時間ごと:['2024-01-01T00' '2024-01-01T01' '2024-01-01T02' '2024-01-01T03'
 '2024-01-01T04' '2024-01-01T05' '2024-01-01T06' '2024-01-01T07'
 '2024-01-01T08' '2024-01-01T09' '2024-01-01T10' '2024-01-01T11'
 '2024-01-01T12' '2024-01-01T13' '2024-01-01T14' '2024-01-01T15'
 '2024-01-01T16' '2024-01-01T17' '2024-01-01T18' '2024-01-01T19'
 '2024-01-01T20' '2024-01-01T21' '2024-01-01T22' '2024-01-01T23']

(2) ▶ サンプル:日付の演算(難易度 ⭐⭐)

PYTHON
import numpy as np

start = np.array('2024-01-15', dtype='datetime64')

# Add days
print("Start:", start)
print("+7 days:", start + 7)
print("+30 days:", start + 30)
print("-5 days:", start - 5)

# Difference between dates
d1 = np.array('2024-01-01', dtype='datetime64')
d2 = np.array('2024-12-31', dtype='datetime64')
delta = d2 - d1
print("Days in 2024:", delta)

# Extract components
date = np.array('2024-07-04', dtype='datetime64')
print("Year:", date.astype('datetime64[Y]'))
print("Month:", date.astype('datetime64[M]'))

出力:

TEXT
開始日:2024年1月15日
+7日:2024年1月22日
30日後:2024年2月14日
-5日後:2024年1月10日
2024年の日数:365日
年:2024年
月:2024年7月

(3) ▶ サンプル:営業日の計算(難易度 ⭐⭐)

PYTHON
import numpy as np

start = np.datetime64('2024-01-01')
end = np.datetime64('2024-01-31')

# Count business days
bd = np.busday_count(start, end)
print(f"Business days Jan 2024: {bd}")

# Find next business day
print("Next business day after 2024-01-05:", np.busday_offset('2024-01-05', 0, roll='forward'))

# Business day range
biz_days = np.busday_offset('2024-01-01', np.arange(10))
print("First 10 business days of 2024:", biz_days)

出力:

TEXT
2024年1月の営業日数:22日
2024年1月5日の翌営業日:2024年1月8日
2024年の最初の10営業日:['2024-01-01' '2024-01-02' '2024-01-03' '2024-01-04' '2024-01-05'
 '2024-01-08' '2024-01-09' '2024-01-10' '2024-01-11' '2024-01-12']

Q datetime64とPythonのdatetimeの違いは何ですか?
A datetime64は、時刻を表す固定幅の64ビット整数であるため、高速でメモリ効率に優れています。一方、Pythonのdatetimeは完全なオブジェクトであり、柔軟性が高い反面、オーバーヘッドが大きくなります。
Q datetime64 の解像度はどれくらいですか?
A 単位によって異なります — datetime64[Y](年)、datetime64[M](月)、datetime64[D](日)、 datetime64[h](時間)、datetime64[ms](ミリ秒)、datetime64[ns](ナノ秒)です。
Q 営業日はどのように計算すればよいですか?
A 2つの日付間の営業日を数えるには np.busday_count(start, end) を、最も近い営業日を調べるには np.busday_offset を使用してください。

❓ よくある質問

Q 最も重要なポイントは何か?
A NumPyの演算はベクトル化されているため、パフォーマンスを向上させるにはPythonのループは避けるべきだ。
Q さらに詳しく知りたい場合はどうすればよいですか?
A 詳細なリファレンスや高度なトピックについては、numpy.org の NumPy 公式ドキュメントをご覧ください。
Q これはNumPy 2.xでも動作しますか?
A はい。すべての例はNumPy 2.xと互換性があります。一部の古いAPI(np.random.seedなど)は引き続きサポートされていますが、最新の代替APIの使用をお勧めします。

📖 まとめ



📝 練習問題

  1. 初心者向け(難易度 ⭐):2024年1月のすべての日付を格納した配列を作成してください。その配列の先頭から5つ目と末尾から5つ目の日付を出力してください。

  2. 中級(難易度 ⭐⭐):2024-01-01 から 2024-12-31 までの日付範囲を作成します。各日付から月を抽出し、各月に該当する日付の数を数えてください。

  3. 上級(難易度 ⭐⭐⭐):2024-01-01 から 2024-12-31 までの営業日数を算出してください。その数を暦日数の合計と比較してください。

Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%