Làm cách nào để chuyển đổi datetime thành ngày (bằng Python)?


646

Làm cách nào để chuyển đổi một datetime.datetimeđối tượng (ví dụ: giá trị trả về của datetime.datetime.now())một datetime.dateđối tượng trong Python?


16
Nếu bạn chỉ cần điều này cho datetime.datetime.now(), xin lưu ý rằng có một phương pháp datetime.date.today().
Thierry J.

nếu bạn đã nhập datetime, ví dụ: from datetime import datetimebạn chỉ có thể thêm ngàyfrom datetime import datetime, date
Josh

Câu trả lời:


984

Sử dụng date()phương pháp:

datetime.datetime.now().date()

14
Để tham gia vào UTC có thể rất hữu ích -> datetime.datetime.utcnow()và tương ứngdatetime.datetime.utcnow().date()
Nick Brady

2
Cảm ơn @SeanColombo, ngày hiện tại trong một múi giờ cụ thể sẽ làdatetime.datetime.now(pytz.timezone('US/Pacific')).date()
Monica Dành cho CEO


62

Bạn sử dụng datetime.datetime.date()phương pháp:

datetime.datetime.now().date()

Rõ ràng, biểu thức trên có thể (và nên IMHO :) được viết là:

datetime.date.today()

14
đừng nhầm lẫn anh chàng.
fiatjaf

1
để công bằng, câu trả lời này (sử dụng .today()) là pythonic nhất cho câu hỏi ví dụ đã nêu.
Dannid

2
Nếu bạn sử dụng ngày hôm nay, hãy cẩn thận khi so sánh một ngày. today()có một thành phần giờ quá. vì vậy nếu bạn làm như vậy: losdat = datetime.datetime.strptime(losdatstr, '%d%m%Y')và sau đó if losdat < datetime.datetime.today():nó sẽ luôn đúng bởi vì losdatsẽ có thành phần thời gian là nửa đêm sẽ rơi trước dấu thời gian củatoday()
Dennis Decoene

3
@DennisDecoene: tại sao sử dụng datetime.datetime.today()thay vì datetime.date.today(), khi một người muốn một datetime.dateđối tượng?
tzot

@tzot Vâng, đó cũng là những gì tôi muốn chỉ ra nhưng không rõ ràng.
Dennis Decoene

45

Bạn có thể chuyển đổi một đối tượng datetime thành một ngày bằng phương thức date () của đối tượng thời gian ngày, như sau:

<datetime_object>.date()

3
import time
import datetime

# use mktime to step by one day
# end - the last day, numdays - count of days to step back
def gen_dates_list(end, numdays):
  start = end - datetime.timedelta(days=numdays+1)
  end   = int(time.mktime(end.timetuple()))
  start = int(time.mktime(start.timetuple()))
  # 86400 s = 1 day
  return xrange(start, end, 86400)

# if you need reverse the list of dates
for dt in reversed(gen_dates_list(datetime.datetime.today(), 100)):
    print datetime.datetime.fromtimestamp(dt).date()

2
Ý của bạn là đăng câu trả lời này ở đây? Đối với tôi có vẻ như câu trả lời của bạn hướng đến một câu hỏi khác.
Tất cả công nhân là cần thiết

2

bạn có thể nhập mẫu mã này cho (ngày hôm nay & Tên của Ngày & giờ) : datetime.datetime.now().strftime('%y-%m-%d %a %H:%M:%S')

'19 -09-09 Thứ Hai 17:37:56 '

và nhập mã này cho ( ngày hôm nay đơn giản) : datetime.date.today().strftime('%y-%m-%d') '19 -09-10 '

cho đối tượng: datetime.datetime.now().date() datetime.datetime.today().date() datetime.datetime.utcnow().date() datetime.datetime.today().time() datetime.datetime.utcnow().date() datetime.datetime.utcnow().time()


OP muốn lấy datetime.dateđối tượng chứ không phải chuỗi, strftimesẽ trả về (ref: docs.python.org/3/l Library / datetime.html # datetime.date.strftime ).
Grzegorz Skibinski
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.