Hướng dẫn how to truncate datetime in python - cách cắt ngắn ngày giờ trong python

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.

Hướng dẫn how to truncate datetime in python - cách cắt ngắn ngày giờ trong python

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

Hướng dẫn how to truncate datetime in python - cách cắt ngắn ngày giờ trong python

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

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
    >>> now = datetime.now()
    >>> now.date()
    datetime.date(2011, 3, 29)
    
    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.
  • 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:
    >>> now = datetime.now()
    >>> now.date()
    datetime.date(2011, 3, 29)
    
    9

Đã trả lời ngày 1 tháng 8 năm 2015 lúc 2:29Aug 1, 2015 at 2:29

Hướng dẫn how to truncate datetime in python - cách cắt ngắn ngày giờ trong python

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

Hướng dẫn how to truncate datetime in python - cách cắt ngắn ngày giờ trong python

ʇ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)
1

Nế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)
2

Ouput (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)
4

Chú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

Hướng dẫn how to truncate datetime in python - cách cắt ngắn ngày giờ trong python

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)
8

Chú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)
0

Tá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

Làm thế nào để bạn cắt tỉa ngày và thời gian trong Python?

Bạn có thể sử dụng DateTime.strftime để trích xuất ngày, tháng, năm ...datetime. strftime to extract the day, the month, the year...

Làm cách nào để loại bỏ dấu thời gian từ một ngày trong Python?

Làm cách nào để loại bỏ thời gian khỏi cột ngày trong Python ?..
Python - Lặp lại các hàng DataFrame để loại bỏ thời gian khỏi dấu DateTime ..
Pandas chuyển đổi mm/dd/yyyy hh: mm cho đến ngày ..
Xóa thời gian khỏi hàm DateTime ..
Định dạng toàn bộ cột sau khi áp dụng Date Offerset ..

Bạn có thể trừ đi Python DateTime không?

Để thêm hoặc trừ ngày, chúng tôi sử dụng một thứ gọi là hàm TimedelTa () có thể được tìm thấy trong lớp DateTime.Nó được sử dụng để thao tác ngày và chúng ta có thể thực hiện các hoạt động số học trên các ngày như thêm hoặc trừ.. It is used to manipulate Date, and we can perform arithmetic operations on dates like adding or subtracting.

Làm cách nào để loại bỏ tzinfo khỏi DateTime?

Để loại bỏ dấu thời gian, tzinfo phải được đặt không khi gọi chức năng thay thế ().Đầu tiên, tạo một đối tượng DateTime với thời gian hiện tại bằng DateTime.bây giờ().Đối tượng DateTime sau đó được sửa đổi để chứa thông tin múi giờ cũng bằng cách sử dụng múi giờ.set None when calling replace() function. First, create a DateTime object with current time using datetime. now(). The DateTime object was then modified to contain the timezone information as well using the timezone.