Convertissez les deux chaînes en horodatage (dans la résolution de votre choix, par exemple en millisecondes, en secondes, en heures, en jours, etc.), soustrayez la première de la seconde, multipliez votre nombre aléatoire (en supposant qu'il soit distribué dans l'ordre de grandeur suivant range [0, 1]
) avec cette différence, et ajouter à nouveau à la précédente. Reconvertissez l'horodatage en chaîne de dates et vous obtenez une heure aléatoire dans cette plage.
Exemple Python (la sortie est presque dans le format que vous avez spécifié, à l'exception de 0
padding - blâmez les conventions du format de temps américain) :
import random
import time
def str_time_prop(start, end, time_format, prop):
"""Get a time at a proportion of a range of two formatted times.
start and end should be strings specifying times formatted in the
given format (strftime-style), giving an interval [start, end].
prop specifies how a proportion of the interval to be taken after
start. The returned time will be in the specified format.
"""
stime = time.mktime(time.strptime(start, time_format))
etime = time.mktime(time.strptime(end, time_format))
ptime = stime + prop * (etime - stime)
return time.strftime(time_format, time.localtime(ptime))
def random_date(start, end, prop):
return str_time_prop(start, end, '%m/%d/%Y %I:%M %p', prop)
print(random_date("1/1/2008 1:30 PM", "1/1/2009 4:50 AM", random.random()))
0 votes
La façon dont la question est présentée actuellement ne permet pas de savoir si vous souhaitez que la date ou l'heure soit aléatoire. Votre exemple suggère que vous recherchez une heure. Si elle doit se situer entre les deux dates, vous pouvez modifier les réponses données jusqu'à présent pour les adapter à vos besoins et exclure l'heure de début et de fin. Enfin, dans la plupart des réponses, comme celle qui a été acceptée, le code produit une date excluant l'heure de fin en raison de la troncature en int. Pour générer une heure qui peut inclure la fin dans la réponse, changez le code en
ptime = stime + prop * (etime - stime) + 0.5
0 votes
Oui, la question portait probablement sur l'interpolation, et tous ceux qui la trouvent veulent une date aléatoire :)