2016-06-18 5 views
0

エポックタイムフォーマットを使用して、与えられた時間の範囲からランダムな時間を持ちたいと思っています。 は例えば、私はこれがあります。エポックタイムフォーマットを使用した所与の時間のランダムな時間

start_time = int(time.time()) 
end_time = start_time + 5184000 # 60 days 
random_time = random.randint(start_time, end_time) 

をそして私は唯一の午前9時から午後9時までのランダムな時間を取得したいです。これをPythonで実現する最もシンプルで素敵な方法は何ですか?

+0

午前9時から午後9時までのランダムな分の60日(範囲は文脈から与えられる)のリストを取得することを意味しますか? – spacegoing

+0

そう、はい。実際、1日3回ランダムにしたい。 – mchfrnc

答えて

1

私がOP権を理解していれば、これは次の60日間は3回ランダムになり、各ランダム時間は午前9時から午後9時の間です。エポック時間があるためうるう日、分、秒の日の実際の時間上の任意の情報を与えることができないので、私はビルトイン・パッケージdatetimeを使用していますし、エポックタイムを使用していない理由がある

import datetime 
import random 

d = datetime.datetime.today() 
d = d.replace(hour=0, minute=0, second=0, microsecond=0) 

for days in range(60): 
    for c in range(3): # OP wanted 3 times per date 
     hours = random.randint(9, 20) 
     minutes = random.randint(0, 59) 
     seconds = random.randint(0, 60) 

     new_d = d + datetime.timedelta(days=days, hours=hours, minutes=minutes, seconds=seconds) 

     print(new_d) 

。しかし、パッケージは組み込まれているので、これは問題ではありません。

+0

ランダムな時間がコード内で繰り返されることがあります。またおそらく '秒= random.randint(0、59)'( 'randrange(60)')を使うべきです。 3つの 'random'呼び出しを' d = d.replace(hour = 9、...) 'と' random_d = d + timedelta(seconds = random.randrange(12 * 3600)) 'のように置き換えることができます「午後9時」は含まれないと仮定する)。 – jfs

1

構造化時間は読み取り専用なので、ハッキングできません。ランダムな時間が収まらない場合は、ランダムに時間を微調整してください。

import time,random 

start_time = int(time.time()) 
end_time = start_time + 5184000 # 60 days 

random_time = random.randint(start_time, end_time) 

ts = time.localtime(random_time) 
if 9 <= ts.tm_hour < 21: 
    pass 
else: 
    hour = random.randrange(9,21)  
    rts=[ts.tm_year,ts.tm_mon,ts.tm_mday,hour,ts.tm_min,ts.tm_sec,ts.tm_wday,ts.tm_yday,ts.tm_isdst] 
    random_time = time.mktime(rts) 

print(random_time,time.strftime("%Y-%m-%d %H-%M-%S",rts)) 
+0

これは 'start_time'よりも早い時刻を生成することができます。 – jfs

1

Q:あなたは午前9時から午後9時までのランダムな分の(範囲は、文脈から与えられた)60日のリストを取得したいわけですか?
A: はい、はいとしましょう。実際、1日3回ランダムにしたい。

#!/usr/bin/env python 
import random 
import time 

HOUR = 3600 
DAY = 24 * HOUR 

def random_times(ndays=60, n_per_day=3): 
    midnight = (int(time.time()) // DAY) * DAY 
    start = midnight + 9 * HOUR # 9am in UTC 
    end = start + ndays * DAY 
    while start < end: 
     yield sorted(random.sample(range(start, start + 12 * HOUR), n_per_day)) 
     start += DAY 

それは "エポック時間形式" で時間を作り出します。現在の時刻よりも早いランダムな時刻を生成することがあります。それが望ましくない場合は、別の式を使用して非常に最初の日のためのランダムな時間を計算することができます:それは最初の日にあまり利用できる時間があってもn_per_dayランダムな時間を生成しようとし

available_times = range(max(int(time.time()), start), start + 12 * HOUR) 
yield sorted(random.sample(available_times, min(n_per_day, len(available_times))) 

あなたはstartが異なって計算されなければならないよりも、ローカルタイムゾーンで午後9時まで午前9時間の時間が必要な場合:

start = time.mktime(time.localtime()[:3] + (9, 0, 0) + (-1,)*3) 

残りは午後9時まで午前9時との間にはDSTの移行(合理的な仮定がないと仮定するとまったく同じです)または欠落した日(それはまれに起こる)、現地の時間帯の次の60日間で

関連する問題