Một cách sang trọng để cắt ngắn đối tượng Python
>>> now = datetime.now[]
>>> now.date[]
datetime.date[2011, 3, 29]
1 là gì?Trong trường hợp cụ thể này, cho đến ngày. Vì vậy, về cơ bản đặt giờ, phút, giây và micro giây đến 0.
Tôi muốn đầu ra cũng là một đối tượng
>>> now = datetime.now[]
>>> now.date[]
datetime.date[2011, 3, 29]
1, không phải là một chuỗi.
Martineau
Huy hiệu vàng 116K2525 gold badges161 silver badges286 bronze badges
Đã hỏi ngày 29 tháng 3 năm 2011 lúc 16:52Mar 29, 2011 at 16:52
Kyle Brandtkyle BrandtKyle Brandt
25.8K34 Huy hiệu vàng122 Huy hiệu bạc162 Huy hiệu đồng34 gold badges122 silver badges162 bronze badges
0
Tôi nghĩ rằng đây là những gì bạn đang tìm kiếm ...
>>> import datetime
>>> dt = datetime.datetime.now[]
>>> dt = dt.replace[hour=0, minute=0, second=0, microsecond=0] # Returns a copy
>>> dt
datetime.datetime[2011, 3, 29, 0, 0]
Nhưng nếu bạn thực sự không quan tâm đến khía cạnh thời gian của mọi thứ, thì bạn thực sự chỉ nên đi qua các đối tượng
>>> now = datetime.now[]
>>> now.date[]
datetime.date[2011, 3, 29]
3 ...>>> d_truncated = datetime.date[dt.year, dt.month, dt.day]
>>> d_truncated
datetime.date[2011, 3, 29]
Narfanator
5.4473 Huy hiệu vàng38 Huy hiệu bạc62 Huy hiệu Đồng3 gold badges38 silver badges62 bronze badges
Đã trả lời ngày 29 tháng 3 năm 2011 lúc 17:00Mar 29, 2011 at 17:00
5
Sử dụng
>>> now = datetime.now[]
>>> now.date[]
datetime.date[2011, 3, 29]
3 không phải >>> now = datetime.now[]
>>> now.date[]
datetime.date[2011, 3, 29]
1 nếu bạn không quan tâm đến thời gian.>>> now = datetime.now[]
>>> now.date[]
datetime.date[2011, 3, 29]
Bạn có thể cập nhật một DateTime như thế này:
>>> now.replace[minute=0, hour=0, second=0, microsecond=0]
datetime.datetime[2011, 3, 29, 0, 0]
Đã trả lời ngày 29 tháng 3 năm 2011 lúc 16:55Mar 29, 2011 at 16:55
Jochen Ritzeljochen RitzelJochen Ritzel
102K30 Huy hiệu vàng196 Huy hiệu bạc192 Huy hiệu Đồng30 gold badges196 silver badges192 bronze badges
3
Bốn năm sau: Một cách khác, tránh >>> now = datetime.now[]
>>> now.date[]
datetime.date[2011, 3, 29]
6
>>> now = datetime.now[]
>>> now.date[]
datetime.date[2011, 3, 29]
Tôi biết câu trả lời được chấp nhận từ bốn năm trước hoạt động, nhưng điều này có vẻ nhẹ hơn so với sử dụng
>>> now = datetime.now[]
>>> now.date[]
datetime.date[2011, 3, 29]
6:dt = datetime.date.today[]
dt = datetime.datetime[dt.year, dt.month, dt.day]
Ghi chú
- Khi bạn tạo một đối tượng
1 mà không chuyển các thuộc tính thời gian cho hàm tạo, bạn sẽ nhận được nửa đêm.>>> now = datetime.now[] >>> now.date[] datetime.date[2011, 3, 29]
- Như những người khác đã lưu ý, điều này giả định rằng bạn muốn một đối tượng DateTime để sử dụng sau với TimeDeltas.
- Tất nhiên, bạn có thể thay thế điều này cho dòng đầu tiên:
9>>> now = datetime.now[] >>> now.date[] datetime.date[2011, 3, 29]
Đã trả lời ngày 1 tháng 8 năm 2015 lúc 2:29Aug 1, 2015 at 2:29
zx81zx81zx81
40.3k9 Huy hiệu vàng82 Huy hiệu bạc105 Huy hiệu Đồng9 gold badges82 silver badges105 bronze badges
1
Để có được một nửa đêm tương ứng với một đối tượng DateTime nhất định, bạn có thể sử dụng phương thức
>>> now.replace[minute=0, hour=0, second=0, microsecond=0]
datetime.datetime[2011, 3, 29, 0, 0]
0:>>> from datetime import datetime, time
>>> dt = datetime.utcnow[]
>>> dt.date[]
datetime.date[2015, 2, 3]
>>> datetime.combine[dt, time.min]
datetime.datetime[2015, 2, 3, 0, 0]
Ưu điểm so với phương pháp
>>> now.replace[minute=0, hour=0, second=0, microsecond=0]
datetime.datetime[2011, 3, 29, 0, 0]
1 là giải pháp dựa trên ____ 30 sẽ tiếp tục hoạt động ngay cả khi mô-đun >>> now = datetime.now[]
>>> now.date[]
datetime.date[2011, 3, 29]
1 giới thiệu hỗ trợ nano giây.>>> now.replace[minute=0, hour=0, second=0, microsecond=0]
datetime.datetime[2011, 3, 29, 0, 0]
4 có thể được bảo tồn nếu cần thiết nhưng phần bù UTC có thể khác nhau vào nửa đêm, ví dụ, do quá trình chuyển đổi DST và do đó một giải pháp ngây thơ [cài đặt thuộc tính thời gian ____34] có thể thất bại. Xem làm thế nào để tôi có được thời gian UTC của Mid Midnight cho một múi giờ nhất định?
Đã trả lời ngày 4 tháng 2 năm 2015 lúc 0:10Feb 4, 2015 at 0:10
JFSJFSjfs
385K183 Huy hiệu vàng949 Huy hiệu bạc1623 Huy hiệu Đồng183 gold badges949 silver badges1623 bronze badges
1
Bạn không thể cắt ngắn một đối tượng DateTime vì nó là bất biến.
Tuy nhiên, đây là một cách để xây dựng một DateTime mới với các trường 0 giờ, phút, thứ hai và micro, mà không vứt bỏ ngày ban đầu hoặc tzinfo:
newdatetime = now.replace[hour=0, minute=0, second=0, microsecond=0]
Đã trả lời ngày 29 tháng 3 năm 2011 lúc 17:10Mar 29, 2011 at 17:10
ʇsәɹoɉʇsәɹoɉʇsәɹoɈ
21.8K7 Huy hiệu vàng53 Huy hiệu bạc60 Huy hiệu Đồng7 gold badges53 silver badges60 bronze badges
2
Bạn có thể sử dụng gấu trúc cho điều đó [mặc dù nó có thể là chi phí cho nhiệm vụ đó]. Bạn có thể sử dụng các số lượng tròn, sàn và trần cho các số thông thường và bất kỳ tần số gấu trúc nào từ các aliass offset:
import pandas as pd
import datetime as dt
now = dt.datetime.now[]
pd_now = pd.Timestamp[now]
freq = '1d'
pd_round = pd_now.round[freq]
dt_round = pd_round.to_pydatetime[]
print[now]
print[dt_round]
"""
2018-06-15 09:33:44.102292
2018-06-15 00:00:00
"""
Đã trả lời ngày 15 tháng 6 năm 2018 lúc 6:35Jun 15, 2018 at 6:35
Anton Protopopovanton ProtopopovAnton Protopopov
28.6K11 Huy hiệu vàng84 Huy hiệu bạc91 Huy hiệu Đồng11 gold badges84 silver badges91 bronze badges
Có một thư viện tuyệt vời được sử dụng để thao túng ngày: DeLorean
import datetime
from delorean import Delorean
now = datetime.datetime.now[]
d = Delorean[now, timezone='US/Pacific']
>>> now
datetime.datetime[2015, 3, 26, 19, 46, 40, 525703]
>>> d.truncate['second']
Delorean[datetime=2015-03-26 19:46:40-07:00, timezone='US/Pacific']
>>> d.truncate['minute']
Delorean[datetime=2015-03-26 19:46:00-07:00, timezone='US/Pacific']
>>> d.truncate['hour']
Delorean[datetime=2015-03-26 19:00:00-07:00, timezone='US/Pacific']
>>> d.truncate['day']
Delorean[datetime=2015-03-26 00:00:00-07:00, timezone='US/Pacific']
>>> d.truncate['month']
Delorean[datetime=2015-03-01 00:00:00-07:00, timezone='US/Pacific']
>>> d.truncate['year']
Delorean[datetime=2015-01-01 00:00:00-07:00, timezone='US/Pacific']
Và nếu bạn muốn lấy lại giá trị DateTime:
>>> d.truncate['year'].datetime
datetime.datetime[2015, 1, 1, 0, 0, tzinfo=]
Đã trả lời ngày 27 tháng 3 năm 2015 lúc 2:54Mar 27, 2015 at 2:54
DmitrysemenovdmitrysemenovDmitrySemenov
8.40013 Huy hiệu vàng59 Huy hiệu bạc95 Huy hiệu Đồng13 gold badges59 silver badges95 bronze badges
1
Bạn có thể sử dụng DateTime.strftime để trích xuất ngày, tháng, năm ...
Thí dụ :
>>> d_truncated = datetime.date[dt.year, dt.month, dt.day]
>>> d_truncated
datetime.date[2011, 3, 29]
0Đầu ra [cho ngày hôm nay]:
>>> d_truncated = datetime.date[dt.year, dt.month, dt.day]
>>> d_truncated
datetime.date[2011, 3, 29]
1Nếu bạn chỉ muốn lấy lại một ngày, bạn có thể sử dụng thuộc tính ngày như:
>>> d_truncated = datetime.date[dt.year, dt.month, dt.day]
>>> d_truncated
datetime.date[2011, 3, 29]
2Ouput [cho ngày hôm nay]:
>>> d_truncated = datetime.date[dt.year, dt.month, dt.day]
>>> d_truncated
datetime.date[2011, 3, 29]
3
Đã trả lời ngày 29 tháng 3 năm 2011 lúc 16:57Mar 29, 2011 at 16:57
Sandro Mundasandro MundaSandro Munda
39K24 Huy hiệu vàng96 Huy hiệu bạc120 Huy hiệu đồng24 gold badges96 silver badges120 bronze badges
2
Nếu bạn đang xử lý một loạt các loại DateTime, có một cách hiệu quả hơn để cắt ngắn chúng, đặc biệt khi đối tượng loạt có rất nhiều hàng.
Bạn có thể sử dụng chức năng sàn
Ví dụ: nếu bạn muốn cắt nó thành giờ:
Tạo ra một loạt các ngày
>>> d_truncated = datetime.date[dt.year, dt.month, dt.day]
>>> d_truncated
datetime.date[2011, 3, 29]
4Chúng ta có thể kiểm tra nó so sánh thời gian chạy giữa các chức năng thay thế và sàn.
>>> d_truncated = datetime.date[dt.year, dt.month, dt.day]
>>> d_truncated
datetime.date[2011, 3, 29]
5Đã trả lời ngày 19 tháng 9 năm 2018 lúc 0:10Sep 19, 2018 at 0:10
1
>>> d_truncated = datetime.date[dt.year, dt.month, dt.day]
>>> d_truncated
datetime.date[2011, 3, 29]
6Đã trả lời ngày 2 tháng 4 năm 2019 lúc 9:49Apr 2, 2019 at 9:49
Marklingmarklingmarkling
1.17414 Huy hiệu bạc26 Huy hiệu đồng14 silver badges26 bronze badges
1
Đây là một cách khác phù hợp với một dòng nhưng không đặc biệt thanh lịch:
>>> d_truncated = datetime.date[dt.year, dt.month, dt.day]
>>> d_truncated
datetime.date[2011, 3, 29]
7Đã trả lời ngày 20 tháng 2 năm 2020 lúc 13:19Feb 20, 2020 at 13:19
Valentin B.Valentin B.Valentin B.
5825 Huy hiệu bạc18 Huy hiệu Đồng5 silver badges18 bronze badges
Có một mô -đun datetime_truncate xử lý điều này cho bạn. Nó chỉ gọi DateTime.Reater.
Đã trả lời ngày 1 tháng 10 năm 2013 lúc 11:47Oct 1, 2013 at 11:47
Kyrrekyrrekyrre
6242 Huy hiệu vàng9 Huy hiệu bạc24 Huy hiệu đồng2 gold badges9 silver badges24 bronze badges
6 năm sau ... Tôi đã tìm thấy bài đăng này và tôi thích hơn aproach numpy:
>>> d_truncated = datetime.date[dt.year, dt.month, dt.day]
>>> d_truncated
datetime.date[2011, 3, 29]
8Chúc mừng
Đã trả lời ngày 25 tháng 7 năm 2017 lúc 10:47Jul 25, 2017 at 10:47
Bạn chỉ có thể sử dụng
>>> d_truncated = datetime.date[dt.year, dt.month, dt.day]
>>> d_truncated
datetime.date[2011, 3, 29]
9Đó là ánh sáng và trả về chính xác những gì bạn muốn.
Vidal
2.4862 Huy hiệu vàng14 Huy hiệu bạc28 Huy hiệu đồng2 gold badges14 silver badges28 bronze badges
Đã trả lời ngày 7 tháng 1 năm 2019 lúc 17:26Jan 7, 2019 at 17:26
BordottibordottiBordotti
1051 Huy hiệu vàng1 Huy hiệu bạc8 Huy hiệu đồng1 gold badge1 silver badge8 bronze badges
4
Nếu bạn muốn cắt giảm thời gian tùy ý:
>>> now = datetime.now[]
>>> now.date[]
datetime.date[2011, 3, 29]
0Tái bút: Đây là cho Python3
Đã trả lời ngày 4 tháng 5 lúc 14:04May 4 at 14:04
Lionelslionelslionels
7127 Huy hiệu bạc12 Huy hiệu đồng7 silver badges12 bronze badges