日常生活では、日付と時刻を表すためにさまざまな形式を使用できます。たとえば、2022 年 7 月 4 日、3 月 8 日、22:00、2022 年 12 月 31 日、23:59 などです。 :59。整数と文字列の組み合わせを使用したり、浮動小数点数を使用して日や分などを表すこともできます。時間を表すさまざまな方法は本当に素晴らしいです。
しかし幸いなことに、Python には datetime モジュールがあり、日付と時刻を表すオブジェクトを簡単に操作できるようになります。
今日の記事では、次のことを学びます:
# From the datetime module import date from datetime import date # Create a date object of 2000-02-03 date(2022, 2, 3)Output:
datetime.date(2022, 2, 3)上記のコードでは、モジュールから date クラスを取得し、2022 年 2 月 3 日の datetime.date オブジェクトを作成しました。このオブジェクトの作成に使用される数値のシーケンスは ISO 8061 とまったく同じであることに注意してください (ただし、0 は省略し、1 桁の月と日のみを記述しています)。
# Create a date object of 2000-26-03 date(2000, 26, 3)出力:
--------------------------------------------------------------------------- ValueErrorTraceback (most recent call last) Input In [2], in 1 # Create a date object of 2000-26-03 ----> 2 date(2000, 26, 3) ValueError: month must be in 1..12us ValueError の取得: 月は 1..12 である必要があります。カレンダーには 26 番目の月がないことは間違いなく、例外がスローされます。
# From the datetime module import time from datetime import time # Create a time object of 05:35:02 time(5, 35, 2)出力:
datetime.time(5, 35, 2)次に、両方の日付が含まれている場合はどうなるでしょうか。そして時間は? datetime クラスを使用する必要があります。
# From the datetime module import datetime from datetime import datetime # Create a datetime object of 2000-02-03 05:35:02 datetime(2000, 2, 3, 5, 35, 2)Output:
datetime.datetime(2000, 2, 3, 5, 35, 2)予想どおり、datetime オブジェクトが正常に作成されました。キーワード引数をより明示的に datetime コンストラクターに渡すこともできます。
datetime(year=2000, month=2, day=3, hour=5, minute=35, second=2)Output:
datetime.datetime(2000, 2, 3, 5, 35, 2)3 つのパラメーター (年、月、日) のみを渡す場合、エラーは報告されますか?
# Create a datetime object of 2000-02-03 datetime(2000, 2, 3)出力:
datetime.datetime(2000, 2, 3, 0, 0)オブジェクト内に時間と分を表す 2 つのゼロがあることがわかります。秒も省略されています。
# Time at the moment now = datetime.now() nowOutput:
datetime.datetime(2022, 8, 1, 0, 9, 39, 611254)datetime オブジェクトが取得されます。最後の数値はマイクロ秒です。
today = date.today() today出力:
datetime.date(2022, 8, 1)時刻が必要な場合は、datetime.now() オブジェクトの時、分、秒のプロパティにアクセスし、それらを時刻コンストラクターに渡す必要があります。
time(now.hour, now.minute, now.second)Output:
datetime.time(11, 33, 25)isocalendar() 関数を使用して、datetime オブジェクトから週番号と日番号を抽出することもできます。 ISO 年、週番号、営業日番号を含む 3 項目のタプルが返されます。
# isocalendar() returns a 3-item tuple with ISO year, week number, and weekday number now.isocalendar()出力:
datetime.IsoCalendarDate(year=2022, week=7, weekday=1)ISO 形式では、週は月曜日に始まり、終了日曜日に終了します。曜日は 1 (月曜日) から 7 (日曜日) までの数字でエンコードされます。これらのタプル要素のいずれかにアクセスしたい場合は、括弧表記を使用する必要があります:
# Access week number week_number = now.isocalendar()[1] week_numberOutput:
7
在数据科学和一般编程中,我们主要使用以数十种不同格式存储为字符串的日期和时间,具体取决于地区、公司或我们需要的信息粒度。有时,我们需要日期和确切时间,但在其他情况下,我们只需要年份和月份。我们该如何从字符串中提取我们需要的数据,以便将其作为日期时间(日期、时间)对象来操作呢?
我们学习的第一个将日期字符串转换为日期对象的函数是 fromisoformat,我们这样称呼它是因为它使用 ISO 8601 格式(即 YYYY-MM-DD),让我们看一个例子:
# Convert a date string into a date object date.fromisoformat("2022-12-31")
Output:
datetime.date(2022, 12, 31)
ISO 格式也包含时间,但如果我们却不能将它传递给函数:
date.fromisoformat("2022-12-31 00:00:00")
Output:
--------------------------------------------------------------------------- ValueErrorTraceback (most recent call last) Input In [13], in ----> 1 date.fromisoformat("2022-12-31 00:00:00") ValueError: Invalid isoformat string: '2022-12-31 00:00:00'
当然,我们也可以进行逆向运算,将 datetime 对象转换为 ISO 格式的日期字符串,我们应该使用 isoformat():
# Convert a datetime object into a string in the ISO format date(2022, 12, 31).isoformat()
Output:
'2022-12-31'
为了解决上述 ValueError 问题,我们可以使用 strptime() 函数,该函数可以将任意日期/时间字符串转换为日期时间对象。我们的字符串不一定需要遵循 ISO 格式,但我们应该指定字符串的哪一部分代表哪个日期或时间单位(年、小时等)。让我们看一个例子,首先,我们将使用严格的 ISO 格式将字符串转换为日期时间对象:
# Date as a string iso_date = "2022-12-31 23:59:58" # ISO format iso_format = "%Y-%m-%d %H:%M:%S" # Convert the string into a datetime object datetime.strptime(iso_date, iso_format)
Output:
datetime.datetime(2022, 12, 31, 23, 59, 58)
在第一行,我们创建一个日期/时间字符串。在第二行中,我们使用特殊代码指定字符串的格式,该代码包含一个百分号,后跟一个编码日期或时间单位的字符。最后,在第三行中,我们使用 strptime() 函数将字符串转换为日期时间对象。这个函数有两个参数:字符串和字符串的格式。
我们上面使用的代码还可以编码其他日期和时间单位,如工作日、月份名称、周数等。
代码 |
示例 |
说明 |
%A |
Monday |
完整的工作日名称 |
%B |
December |
全月名称 |
#%W | 2 | 週数 (月曜日は初日)############### 让我们再看几个使用其他格式的示例: # European date as a string european_date = "31-12-2022" # European format european_format = "%d-%m-%Y" # Convert the string into a datetime object datetime.strptime(european_date, european_format) Output: datetime.datetime(2022, 12, 31, 0, 0) 如上所示,字符串已成功转换,但还有额外的零表示时间字段,让我们看一个使用其他代码的示例: # Full month name date full_month_date = "12 September 2022" # Full month format full_month_format = "%d %B %Y" # Convert the string into a datetime object datetime.strptime(full_month_date, full_month_format) Output: datetime.datetime(2022, 9, 12, 0, 0) 还是可以正常转换,但是需要注意的是,我们定义的格式应该与日期字符串的格式相匹配。因此,如果我们有空格、冒号、连字符或其他字符来分隔时间单位,那么它们也应该在代码字符串中。否则,Python 将抛出 ValueError: # Full month name date full_month_date = "12 September 2022" # Wrong format (missing space) full_month_format = "%d%B %Y" # Convert the string into a datetime object datetime.strptime(full_month_date, full_month_format) Output: --------------------------------------------------------------------------- ValueErrorTraceback (most recent call last) Input In [18], in 5 full_month_format = "%d%B %Y" 7 # Convert the string into a datetime object ----> 8 datetime.strptime(full_month_date, full_month_format) File ~/coding/dataquest/articles/using-the-datetime-package/env/lib/python3.10/_strptime.py:568, in _strptime_datetime(cls, data_string, format) 565 def _strptime_datetime(cls, data_string, format="%a %b %d %H:%M:%S %Y"): 566 """Return a class cls instance based on the input string and the 567 format string.""" --> 568 tt, fraction, gmtoff_fraction = _strptime(data_string, format) 569 tzname, gmtoff = tt[-2:] 570 args = tt[:6] + (fraction,) File ~/coding/dataquest/articles/using-the-datetime-package/env/lib/python3.10/_strptime.py:349, in _strptime(data_string, format) 347 found = format_regex.match(data_string) 348 if not found: --> 349 raise ValueError("time data %r does not match format %r" % 350(data_string, format)) 351 if len(data_string) != found.end(): 352 raise ValueError("unconverted data remains: %s" % 353 data_string[found.end():]) ValueError: time data '12 September 2022' does not match format '%d%B %Y' 可以看到,即使缺少一个空格也可能导致错误! 将日期时间对象转换为字符串
|
以上が時間に夢中にならないようにするための 39 の Python Datetime の例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。