Đây là một đoạn trích nhỏ mà tôi đang thử thực thi:
>>> from datetime import *
>>> item_date = datetime.strptime['7/16/10', "%m/%d/%y"]
>>> from_date = date.today[]-timedelta[days=3]
>>> print type[item_date]
>>> print type[from_date]
>>> if item_date > from_date:
... print 'item is newer'
...
Traceback [most recent call last]:
File "", line 1, in
TypeError: can't compare datetime.datetime to datetime.date
Tôi dường như không thể so sánh ngày và các giá trị DateTime. Điều gì sẽ là cách tốt nhất để so sánh những điều này? Tôi nên chuyển đổi DateTime cho đến ngày hoặc ngược lại? Làm thế nào để tôi chuyển đổi giữa chúng.
[Một câu hỏi nhỏ nhưng nó có vẻ hơi khó hiểu.]
Thanh thản
33.7K19 Huy hiệu vàng114 Huy hiệu bạc111 Huy hiệu đồng19 gold badges114 silver badges111 bronze badges
hỏi ngày 19 tháng 7 năm 2010 lúc 6:58Jul 19, 2010 at 6:58
Mridang Agarwallamridang AgarwallaMridang Agarwalla
41.8K70 Huy hiệu vàng214 Huy hiệu bạc372 Huy hiệu đồng70 gold badges214 silver badges372 bronze badges
1
Sử dụng phương thức .date[]
để chuyển đổi DateTime thành một ngày:
if item_date.date[] > from_date:
Ngoài ra, bạn có thể sử dụng
if item_date.date[] > from_date:
0 thay vì if item_date.date[] > from_date:
1. Bạn đã có thể sử dụngfrom_date = from_date.replace[hour=0, minute=0, second=0, microsecond=0]
Để loại bỏ phần thời gian sau đó.
Đã trả lời ngày 19 tháng 7 năm 2010 lúc 7:02Jul 19, 2010 at 7:02
Kennytmkennytmkennytm
500K101 Huy hiệu vàng1064 Huy hiệu bạc995 Huy hiệu Đồng101 gold badges1064 silver badges995 bronze badges
2
Tôi đang cố gắng so sánh ngày ở định dạng chuỗi như '20110930''20110930'
benchMark = datetime.datetime.strptime['20110701', "%Y%m%d"]
actualDate = datetime.datetime.strptime['20110930', "%Y%m%d"]
if actualDate.date[] < benchMark.date[]:
print True
Omar
1.4933 huy hiệu vàng20 Huy hiệu bạc36 Huy hiệu đồng3 gold badges20 silver badges36 bronze badges
Đã trả lời ngày 29 tháng 9 năm 2011 lúc 12:45Sep 29, 2011 at 12:45
1
Dưới đây là một cách khác, lưu giữ thông tin trong trường hợp cả hai đầu vào đều là DateTime và không phải ngày, "bị đánh cắp" từ một bình luận tại không thể so sánh DateTime.Datetime sang DateTime.Date ... Chuyển đổi ngày thành DateTime bằng cách sử dụng cấu trúc này:
datetime.datetime[d.year, d.month, d.day]
Suggestion:
from datetime import datetime
def ensure_datetime[d]:
"""
Takes a date or a datetime as input, outputs a datetime
"""
if isinstance[d, datetime]:
return d
return datetime.datetime[d.year, d.month, d.day]
def datetime_cmp[d1, d2]:
"""
Compares two timestamps. Tolerates dates.
"""
return cmp[ensure_datetime[d1], ensure_datetime[d2]]
Đã trả lời ngày 24 tháng 4 năm 2015 lúc 6:20Apr 24, 2015 at 6:20
Tobixentobixentobixen
3,7341 Huy hiệu vàng18 Huy hiệu bạc20 Huy hiệu Đồng1 gold badge18 silver badges20 bronze badges
Trong trường hợp của tôi, tôi nhận được hai đối tượng và tôi không biết đó là ngày hoặc các đối tượng thời gian. Chuyển đổi cho đến nay sẽ không tốt vì tôi sẽ bỏ thông tin - hai đối tượng thời gian có cùng ngày nên được sắp xếp chính xác. Tôi ổn với các ngày được sắp xếp trước khi DateTime có cùng ngày.
Tôi nghĩ rằng tôi sẽ sử dụng thời gian trước khi so sánh:
>>> foo=datetime.date[2015,1,10]
>>> bar=datetime.datetime[2015,2,11,15,00]
>>> foo.strftime['%F%H%M%S'] > bar.strftime['%F%H%M%S']
False
>>> foo.strftime['%F%H%M%S'] < bar.strftime['%F%H%M%S']
True
Không thanh lịch, nhưng nên làm việc. Tôi nghĩ sẽ tốt hơn nếu Python không nêu ra lỗi, tôi thấy không có lý do tại sao một DateTime không nên so sánh với một ngày. Hành vi này là nhất quán trong Python2 và Python3.
Đã trả lời ngày 14 tháng 4 năm 2015 lúc 6:12Apr 14, 2015 at 6:12
Tobixentobixentobixen
3,7341 Huy hiệu vàng18 Huy hiệu bạc20 Huy hiệu Đồng1 gold badge18 silver badges20 bronze badges
Trong trường hợp của tôi, tôi nhận được hai đối tượng và tôi không biết đó là ngày hoặc các đối tượng thời gian. Chuyển đổi cho đến nay sẽ không tốt vì tôi sẽ bỏ thông tin - hai đối tượng thời gian có cùng ngày nên được sắp xếp chính xác. Tôi ổn với các ngày được sắp xếp trước khi DateTime có cùng ngày.
from datetime import datetime, date
now = datetime.now[]
today = date.today[]
# compare now with today
two_month_earlier = date[now.year, now.month - 2, now.day]
if two_month_earlier > today:
print[True]
two_month_earlier = datetime[now.year, now.month - 2, now.day]
if two_month_earlier > now:
print["this will work with datetime too"]
Tôi nghĩ rằng tôi sẽ sử dụng thời gian trước khi so sánh:Nov 11, 2019 at 14:32
Không thanh lịch, nhưng nên làm việc. Tôi nghĩ sẽ tốt hơn nếu Python không nêu ra lỗi, tôi thấy không có lý do tại sao một DateTime không nên so sánh với một ngày. Hành vi này là nhất quán trong Python2 và Python3.Peko Chan
Đã trả lời ngày 14 tháng 4 năm 2015 lúc 6:125 silver badges14 bronze badges
Tạo và đối tượng tương tự để so sánh hoạt động quá Ex:
Đã trả lời ngày 11 tháng 11 năm 2019 lúc 14:32
>>> from datetime import datetime
>>> date_obj=datetime.utcnow[].date[]
>>> type[date_obj]
>>> datetime_obj=datetime.utcnow[]
>>> type[datetime_obj]
>>> datetime_obj.timetuple[]
time.struct_time[tm_year=2022, tm_mon=10, tm_mday=11, tm_hour=2, tm_min=12, tm_sec=43, tm_wday=1, tm_yday=284, tm_isdst=-1]
>>> date_obj.timetuple[]
time.struct_time[tm_year=2022, tm_mon=10, tm_mday=11, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=284, tm_isdst=-1]
>>> type[datetime_obj.timetuple[]]
>>> type[date_obj.timetuple[]]
>>> date_obj.timetuple[] , = , != , etc.] to compare dates in Python.