2011-01-21 6 views
7

En Python pouvez-vous sélectionner une date aléatoire à partir d'une année. par exemple. si l'année 2010 était une date retournée pourrait être 15/06/2010Python sélectionner une date aléatoire dans l'année en cours

+6

Voici une date aléatoire pour vous: 2010-08-22. Vous n'avez plus besoin de générer un code. ;) Oh, vous voulez dire un différent à chaque fois. –

Répondre

19

Il est beaucoup plus simple d'utiliser les dates ordinales (selon laquelle la date d'aujourd'hui est 734158):

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

Cela échouera pour les dates avant 1AD.

+1

+1 Très propre! Je ne connaissais pas les dates ordinales avant :-) Clairement meilleur et plus joli que ma solution timstamp, qui a encore plus de limitations sur les "dates avant" ... – plundra

+1

La question était "date aléatoire d'un an", pas entre 1er janvier et aujourd'hui. – AndiDog

+3

Mais le titre était "sélectionnez une date aléatoire dans l'année en cours". Pour obtenir une date aléatoire dans une année arbitraire, il suffit de calculer différentes dates de début et de fin, par exemple: 'start_date = date (jour = 1, mois = 1, année = MY_YEAR) .toordinal() ' et 'end_date = date (jour = 31, mois = 12, année = MY_YEAR) .toordinal() '. –

3

Pas directement, mais vous pourriez ajouter un nombre aléatoire de jours au 1er janvier. Je suppose que les éléments suivants devraient travailler pour le calendrier grégorien:

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

Nice. Il y a en fait une fonction 'isleap()' dans le module 'calendar', qui sauverait la définition de vous-même. –

+0

@Daniel: Merci, vous avez raison. Apprendre quelque chose de nouveau tous les jours sur SO :) N'ont pas beaucoup utilisé le module de calendrier (encore). Edited ma réponse. – 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) 

Modifier: dates ordinales utilisé pour répondre Michael Dunns sont beaucoup mieux d'utiliser alors horodatages! On pourrait vouloir combiner l'utilisation des ordinaux avec cela.

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) 
Questions connexes