Nếu đối tượng Datetime Python của bạn là nhận biết thời gian hơn bạn nên cẩn thận để tránh các lỗi xung quanh các chuyển đổi DST [hoặc thay đổi trong bù UTC vì những lý do khác]:
from datetime import datetime, timedelta
from tzlocal import get_localzone # pip install tzlocal
DAY = timedelta[1]
local_tz = get_localzone[] # get local timezone
now = datetime.now[local_tz] # get timezone-aware datetime object
day_ago = local_tz.normalize[now - DAY] # exactly 24 hours ago, time may differ
naive = now.replace[tzinfo=None] - DAY # same time
yesterday = local_tz.localize[naive, is_dst=None] # but elapsed hours may differ
Nói chung,
import pytz # pip install pytz
local_tz = pytz.timezone['America/Los_Angeles']
now = local_tz.localize[datetime[2014, 11, 2, 10], is_dst=None]
# 2014-11-02 10:00:00 PST-0800
3 và import pytz # pip install pytz
local_tz = pytz.timezone['America/Los_Angeles']
now = local_tz.localize[datetime[2014, 11, 2, 10], is_dst=None]
# 2014-11-02 10:00:00 PST-0800
4 có thể khác nhau nếu bù UTC cho múi giờ địa phương đã thay đổi trong ngày cuối cùng.Ví dụ, thời gian tiết kiệm ánh sáng ban ngày/thời gian mùa hè kết thúc vào mặt trời 2 tháng 11 năm 2014 lúc 02:00:00 A.M. Ở Mỹ/los_angele Timezone Do đó nếu:
import pytz # pip install pytz
local_tz = pytz.timezone['America/Los_Angeles']
now = local_tz.localize[datetime[2014, 11, 2, 10], is_dst=None]
# 2014-11-02 10:00:00 PST-0800
Sau đó
import pytz # pip install pytz
local_tz = pytz.timezone['America/Los_Angeles']
now = local_tz.localize[datetime[2014, 11, 2, 10], is_dst=None]
# 2014-11-02 10:00:00 PST-0800
3 và import pytz # pip install pytz
local_tz = pytz.timezone['America/Los_Angeles']
now = local_tz.localize[datetime[2014, 11, 2, 10], is_dst=None]
# 2014-11-02 10:00:00 PST-0800
4 khác nhau:
3 đúng 24 giờ trước [liên quan đếnimport pytz # pip install pytz local_tz = pytz.timezone['America/Los_Angeles'] now = local_tz.localize[datetime[2014, 11, 2, 10], is_dst=None] # 2014-11-02 10:00:00 PST-0800
8] nhưng lúc 11 giờ sáng, không phải lúc 10 giờ sáng làimport pytz # pip install pytz local_tz = pytz.timezone['America/Los_Angeles'] now = local_tz.localize[datetime[2014, 11, 2, 10], is_dst=None] # 2014-11-02 10:00:00 PST-0800
8import pytz # pip install pytz local_tz = pytz.timezone['America/Los_Angeles'] now = local_tz.localize[datetime[2014, 11, 2, 10], is_dst=None] # 2014-11-02 10:00:00 PST-0800
4 là ngày hôm qua lúc 10 giờ sáng nhưng đó là 25 giờ trước [so vớiimport pytz # pip install pytz local_tz = pytz.timezone['America/Los_Angeles'] now = local_tz.localize[datetime[2014, 11, 2, 10], is_dst=None] # 2014-11-02 10:00:00 PST-0800
8], không phải 24 giờ.import pytz # pip install pytz local_tz = pytz.timezone['America/Los_Angeles'] now = local_tz.localize[datetime[2014, 11, 2, 10], is_dst=None] # 2014-11-02 10:00:00 PST-0800
>>> import pendulum # $ pip install pendulum
>>> now = pendulum.create[2014, 11, 2, 10, tz='America/Los_Angeles']
>>> day_ago = now.subtract[hours=24] # exactly 24 hours ago
>>> yesterday = now.subtract[days=1] # yesterday at 10 am but it is 25 hours ago
>>> [now - day_ago].in_hours[]
24
>>> [now - yesterday].in_hours[]
25
>>> now
>>> day_ago
>>> yesterday
2 Mô -đun xử lý tự động:>>> import pendulum # $ pip install pendulum
>>> now = pendulum.create[2014, 11, 2, 10, tz='America/Los_Angeles']
>>> day_ago = now.subtract[hours=24] # exactly 24 hours ago
>>> yesterday = now.subtract[days=1] # yesterday at 10 am but it is 25 hours ago
>>> [now - day_ago].in_hours[]
24
>>> [now - yesterday].in_hours[]
25
>>> now
>>> day_ago
>>> yesterday
Trong bài viết này, chúng tôi sẽ thảo luận về các cách khác nhau để trừ ngày kể từ một ngày nhất định ở Python.
Giả sử chúng ta có một ngày ngày21/1/2021 và chúng ta muốn trừ n ngày với nó và n có thể là 1, 7, 300 hoặc bất kỳ số nào khác. Chúng tôi muốn ngày cuối cùng sau khi trừ n ngày kể từ ngày nhất định. Hãy để xem cách làm điều đó,
Trừ những ngày kể từ một ngày trong Python sử dụng TimeDelta & DateTime
Python cung cấp một mô -đun dữ liệu để thao tác ngày và giờ. Nó bao gồm các lớp học sau,
- DateTime.Date: Một đối tượng của lớp ngày chỉ định ngày sử dụng năm, tháng và ngày An object of date class specifies a date using year, month and day
- DateTime.time: Một đối tượng của lớp thời gian chỉ định dấu thời gian bằng giờ, phút, giây, micro giây và tzinfo. An object of time class specifies a timestamp using hour, minute, second, microsecond, and tzinfo.
- DateTime.Datetime: Một đối tượng của DateTime là sự kết hợp của ngày và thời gian. An object of datetime is a combination of a date and a time.
- datetime.timedelta: một thời lượng, thể hiện sự khác biệt giữa hai ngày hoặc thời gian hoặc dữ liệu. A duration, that represents the difference between two dates or times or datetimes.
- DateTime.tzinfo: Nó chứa thông tin múi giờ. It contains the timezone information.
Để trừ ngày kể từ một ngày nhất định, chúng tôi sẽ sử dụng các lớp DateTime và Timedelta của mô -đun DateTime của Python.
Các bước để trừ n ngày cho đến nay như sau,
- Bước 1: Nếu ngày đã cho ở định dạng chuỗi, thì chúng ta cần chuyển đổi nó thành đối tượng DateTime. Cho rằng chúng ta có thể sử dụng hàm DateTime.strptime []. Trong khi đó, nếu ngày đã cho đã là một đối tượng DateTime, thì bạn có thể bỏ qua bước này.If the given date is in a string format, then we need to convert it to the datetime object. For that we can use the datetime.strptime[] function. Whereas, if the given date is already a datetime object, then you can skip this step.
- Bước 2: Tạo một đối tượng của Timedelta, để biểu thị khoảng N ngày. Đối với điều đó, vượt qua các ngày đối số với giá trị n trong hàm tạo thời gian. Create an object of timedelta, to represent an interval of N days. For that, pass the argument days with value N in the timedelta constructor.
- Bước 3: Trừ đối tượng Timedelta khỏi đối tượng DateTime. Nó sẽ cung cấp cho chúng tôi một đối tượng DateTime trỏ đến một ngày, tức là ngày trước ngày đã cho. Subtract the timedelta object from the datetime object. It will give us a datetime object pointing to a date i.e. N days before the given date.
- Bước 4: Nếu bạn muốn ngày cuối cùng ở định dạng chuỗi, thì hãy chuyển đổi đối tượng DateTime thành chuỗi bằng cách sử dụng strftime []. Bạn có thể chuyển chuỗi định dạng làm đối số và nó sẽ chuyển đổi đối tượng DateTime thành một chuỗi của định dạng được chỉ định. If you want the final date in string format, then convert the datetime object to string using strftime[]. You can pass the format string as argument and it will convert the datetime object to a string of the specified format.
Hãy để hiểu với một ví dụ,
Quảng cáo
Trừ 10 ngày kể từ một ngày ở Python sử dụng Timedelta
from datetime import datetime from datetime import timedelta given_date = '21/1/2021' print['Given Date: ', given_date] # Create datetime object from date string date_format = '%d/%m/%Y' dtObj = datetime.strptime[given_date, date_format] # Subtract 10 days from a given datetime object n = 10 past_date = dtObj - timedelta[days=n] print['Past Date: ', past_date] print['Past Date: ', past_date.date[]] past_date_str = past_date.strftime[date_format] print['Past Date as string object: ', past_date_str]
Đầu ra
Given Date: 21/1/2021 Past Date: 2021-01-11 00:00:00 Past Date: 2021-01-11 Past Date as string object: 11/01/2021
Chúng tôi đã trừ 10 ngày trong ngày 2121/1/2021 để thực hiện nó, 1111/01/2021.
Khi chúng tôi trừ Timedelta [thời lượng 10 ngày] từ đối tượng DateTime, do đó, nó đã trả về một đối tượng DateTime mới chỉ vào ngày mới. Vì đối tượng DateTime cũng có dấu thời gian, do đó nó cũng được in. Nếu bạn chỉ muốn ngày, thì bạn có thể lấy đối tượng ngày từ đối tượng DateTime bằng hàm Date [], giống như chúng tôi đã làm trong ví dụ trên. Cuối cùng, chúng tôi đã chuyển đổi đối tượng DateTime thành định dạng chuỗi cần thiết bằng cách sử dụng DateTime.strftime [].
Trừ những ngày kể từ một ngày ở Python sử dụng gấu trúc
Pandas cung cấp một ngày học lớp, để lưu trữ thông tin thời lượng hoặc khoảng. Nó chủ yếu được sử dụng để tăng hoặc giảm dấu thời gian. Nó có thể được sử dụng với mô -đun DateTime để trừ n ngày kể từ ngày.DateOffset, to store the duration or interval information. It is mostly used to increment or decrement a timestamp. It can be used with datetime module to to subtract N days from a date.
Hãy để hiểu với một ví dụ,
Trừ 100 ngày kể từ một ngày ở Python
from datetime import datetime import pandas as pd given_date = '1/21/2021' print['Given Date: ', given_date] # Create datetime object from date string date_format = '%m/%d/%Y' dtObj = datetime.strptime[given_date, date_format] # Subtract 100 days from a given datetime object n = 100 past_date = dtObj - pd.DateOffset[days=n] print['Past Date: ', past_date] print['Past Date: ', past_date.date[]] past_date_str = past_date.strftime[date_format] print['Past Date as string object: ', past_date_str]
Đầu ra
Given Date: 1/21/2021 Past Date: 2020-10-13 00:00:00 Past Date: 2020-10-13 Past Date as string object: 10/13/2020
Chúng tôi đã tạo một đối tượng Date Offerset bằng cách chuyển các ngày là 100. Sau đó, chúng tôi đã trừ đối tượng DateOffset này khỏi đối tượng DateTime. Nó đã trả về một đối tượng DateTime trỏ đến ngày, tức là trước 100 ngày kể từ ngày nhất định.DateOffset object by passing days as 100. Then we subtracted this DateOffset object from the datetime object. It returned a datetime object pointing to the date i.e. before 100 days from the given date.
Hãy cùng xem một số ví dụ khác,
Ví dụ: Trừ 365 ngày kể từ một ngày ở Python
from datetime import datetime from datetime import timedelta given_date = '1/21/2021' print['Given Date: ', given_date] # Create datetime object from date string date_format = '%m/%d/%Y' dtObj = datetime.strptime[given_date, date_format] # Subtract 365 days from a given datetime object n = 365 past_date = dtObj - timedelta[days=n] print['Past Date: ', past_date] print['Past Date: ', past_date.date[]] past_date_str = past_date.strftime[date_format] print['Past Date as string object: ', past_date_str]
Đầu ra
Given Date: 1/21/2021 Past Date: 2020-01-22 00:00:00 Past Date: 2020-01-22 Past Date as string object: 01/22/2020
Given Date: 1/21/2021 Past Date: 2020-10-13 00:00:00 Past Date: 2020-10-13 Past Date as string object: 10/13/2020
Chúng tôi đã tạo một đối tượng Date Offerset bằng cách chuyển các ngày là 100. Sau đó, chúng tôi đã trừ đối tượng DateOffset này khỏi đối tượng DateTime. Nó đã trả về một đối tượng DateTime trỏ đến ngày, tức là trước 100 ngày kể từ ngày nhất định.
from datetime import datetime from datetime import timedelta given_date = '21/1/2021' print['Given Date: ', given_date] # Create datetime object from date string date_format = '%d/%m/%Y' dtObj = datetime.strptime[given_date, date_format] # Subtract 60 days from a given datetime object n = 60 past_date = dtObj - timedelta[days=n] print['Past Date: ', past_date] print['Past Date: ', past_date.date[]] past_date_str = past_date.strftime[date_format] print['Past Date as string object: ', past_date_str]
Đầu ra
import pytz # pip install pytz
local_tz = pytz.timezone['America/Los_Angeles']
now = local_tz.localize[datetime[2014, 11, 2, 10], is_dst=None]
# 2014-11-02 10:00:00 PST-0800
0
Given Date: 1/21/2021 Past Date: 2020-10-13 00:00:00 Past Date: 2020-10-13 Past Date as string object: 10/13/2020
Chúng tôi đã tạo một đối tượng Date Offerset bằng cách chuyển các ngày là 100. Sau đó, chúng tôi đã trừ đối tượng DateOffset này khỏi đối tượng DateTime. Nó đã trả về một đối tượng DateTime trỏ đến ngày, tức là trước 100 ngày kể từ ngày nhất định.
import pytz # pip install pytz
local_tz = pytz.timezone['America/Los_Angeles']
now = local_tz.localize[datetime[2014, 11, 2, 10], is_dst=None]
# 2014-11-02 10:00:00 PST-0800
1Đầu ra
import pytz # pip install pytz
local_tz = pytz.timezone['America/Los_Angeles']
now = local_tz.localize[datetime[2014, 11, 2, 10], is_dst=None]
# 2014-11-02 10:00:00 PST-0800
2
Given Date: 1/21/2021 Past Date: 2020-10-13 00:00:00 Past Date: 2020-10-13 Past Date as string object: 10/13/2020
Summary:
Chúng tôi đã tạo một đối tượng Date Offerset bằng cách chuyển các ngày là 100. Sau đó, chúng tôi đã trừ đối tượng DateOffset này khỏi đối tượng DateTime. Nó đã trả về một đối tượng DateTime trỏ đến ngày, tức là trước 100 ngày kể từ ngày nhất định.