Trong Python, bạn có thể chọn một ngày ngẫu nhiên từ một năm. ví dụ. nếu năm 2010 là ngày trả lại có thể là 15/06/2010Python chọn ngày ngẫu nhiên trong năm hiện tại
Trả lời
Đó là đơn giản hơn nhiều để sử dụng ngày thứ (theo đó ngày nay ngày là 734.158):
from datetime import date
import random
start_date = date.today().replace(day=1, month=1).toordinal()
end_date = date.today().toordinal()
random_day = date.fromordinal(random.randint(start_date, end_date))
này sẽ thất bại cho những ngày trước 1AD.
+1 Rất gọn gàng! Tôi không biết những ngày thứ tự là trước :-) Rõ ràng tốt hơn và đẹp hơn sau đó giải pháp timstamp của tôi, mà thậm chí còn có những hạn chế lớn hơn về "ngày trước" ... – plundra
Câu hỏi là "ngày ngẫu nhiên từ một năm", không phải giữa Ngày 1 tháng 1 và hôm nay. – AndiDog
Nhưng tiêu đề là "chọn ngày ngẫu nhiên trong năm hiện tại". Để có được ngày ngẫu nhiên trong một năm tùy ý, bạn chỉ cần tính ngày bắt đầu và kết thúc khác nhau, ví dụ: 'start_date = date (ngày = 1, tháng = 1, năm = MY_YEAR) .toordinal() ' và 'end_date = date (ngày = 31, tháng = 12, năm = MY_YEAR) .toordinal() '. –
Không trực tiếp, nhưng bạn có thể thêm số ngày ngẫu nhiên vào ngày 1 tháng 1. Tôi đoán sau đây nên làm việc cho lịch Gregorian:
from datetime import date, timedelta
import random
import calendar
# Assuming you want a random day of the current year
firstJan = date.today().replace(day=1, month=1)
randomDay = firstJan + timedelta(days = random.randint(0, 365 if calendar.isleap(firstJan.year) else 364))
Rất tốt. Có một hàm 'isleap()' trong mô-đun 'calendar', nó sẽ tự định nghĩa nó. –
@Daniel: Cảm ơn, bạn nói đúng. Học một cái gì đó mới mỗi ngày trên SO :) Đã không sử dụng mô-đun lịch rất nhiều (chưa). Đã chỉnh sửa câu trả lời của tôi. – AndiDog
import datetime, time
import random
def year_start(year):
return time.mktime(datetime.date(year, 1, 1).timetuple())
def rand_day(year):
stamp = random.randrange(year_start(year), year_start(year + 1))
return datetime.date.fromtimestamp(stamp)
Edit: ngày thứ tự như được sử dụng trong Michael Dunns câu trả lời là cách tốt hơn để sử dụng sau đó timestamps! Người ta có thể muốn kết hợp việc sử dụng các mệnh lệnh với điều này mặc dù.
import calendar
import datetime
import random
def generate_random_date(future=True, years=1):
today = datetime.date.today()
#Set the default dates
day = today.day
year = today.year
month = today.month
if future:
year = random.randint(year, year + years)
month = random.randint(month, 12)
date_range = calendar.monthrange(year, month)[1] #dates possible this month
day = random.randint(day + 1, date_range) #1 day in the future
else:
year = random.randint(year, year - years)
month = random.randint(1, month)
day = random.randint(1, day - 1)
return datetime.date(year, month, day)
Đây là ngày ngẫu nhiên cho bạn: 2010-08-22. Bây giờ bạn không phải tạo một mã. ;) Oh, bạn có nghĩa là một khác nhau mỗi lần. –