2011-01-21 32 views
7

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

+6

Đâ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. –

Trả lời

19

Đó 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

+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

+1

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

+3

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() '. –

3

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)) 
+2

Rất tốt. Có một hàm 'isleap()' trong mô-đun 'calendar', nó sẽ tự định nghĩa nó. –

+0

@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

1
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ù.

0
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) 
Các vấn đề liên quan