Creating a 15 minute time span in python

I am new to python. I am trying to create an array of time slots. for example: time_array = ["2016-09-02T17:30:00Z", "2016-09-02T17:45:00Z", "2016-09-02T18:00:00Z", "2016-09-02T18:15:00Z", "2016-09-02T18:30:00Z", "2016-09-02T18:45:00Z"] 1. He must create the item as above, at zulu time until 9pm every day. 2. Must generate elements for the next and next day after the next 3. Start time from 7:00 AM - Time at 9:00 PM, if current_time is> start_time, then generate a 15-minute time interval until 9 PM. and then generate the next day and day + 2. And the Interval should be 7:00, 7:15 like this .. not at 7:12, 8:32

+6
source share
6 answers

It uses a common datetime_range .

The code

 from datetime import datetime, timedelta def datetime_range(start, end, delta): current = start while current < end: yield current current += delta dts = [dt.strftime('%Y-%m-%d T%H:%M Z') for dt in datetime_range(datetime(2016, 9, 1, 7), datetime(2016, 9, 1, 9+12), timedelta(minutes=15))] print(dts) 

Exit

['2016-09-01 T07: 00 Z', '2016-09-01 T07: 15 Z', '2016-09-01 T07: 30 Z', '2016-09-01 T07: 45 Z', ' 2016-09-01 T08: 00 Z ',' 2016-09-01 T08: 15 Z ',' 2016-09-01 T08: 30 Z ',' 2016-09-01 T08: 45 Z ',' 2016- 09-01 T09: 00 Z ',' 2016-09-01 T09: 15 Z ',' 2016-09-01 T09: 30 Z ',' 2016-09-01 T09: 45 Z '...]

+7
source

Looking at the data file, you should use python's built-in date and time objects. then strftime to format the dates.

In a broad sense, you can change the code below, no matter how much time you would like First create a start date.

 Today= datetime.datetime.today() 

Replace 100 with any number of time slots you want.

 date_list = [Today + datetime.timedelta(minutes=15*x) for x in range(0, 100)] 

Finally, format the list as you would like using the following code.

 datetext=[x.strftime('%Y-%m-%d T%H:%M Z') for x in date_list] 
+4
source

I have provided a solution that does not handle time zones, since the problem is generating dates and times, and you can set the time zone later, but you want to.

You have a start date and a start and end time (for each day), plus an interval (in minutes) for these dates. The idea is to create a timedelta object representing the time interval and re-update the date-time until the end time is reached, then we advance one day and reset the time to the original and repeat.

A simple implementation could be:

 def make_dates(start_date, number_of_days, start_time, end_time, interval, timezone): if isinstance(start_date, datetime.datetime): start_date = start_date.date() start_date = datetime.datetime.combine(start_date, start_time) cur_date = start_date num_days_passed = 0 step = datetime.timedelta(seconds=interval*60) while True: new_date = cur_date + step if new_date.time() > end_time: num_days_passed += 1 if num_days_passed > number_of_days: break new_date = start_date + datetime.timedelta(days=num_days_passed) ret_date, cur_date = cur_date, new_date yield ret_date In [31]: generator = make_dates(datetime.datetime.now(), 3, datetime.time(hour=17), datetime.time(hour=19), 15, None) In [32]: next(generator) Out[32]: datetime.datetime(2016, 9, 2, 17, 0) In [33]: next(generator) Out[33]: datetime.datetime(2016, 9, 2, 17, 15) In [34]: list(generator) Out[34]: [datetime.datetime(2016, 9, 2, 17, 30), datetime.datetime(2016, 9, 2, 17, 45), datetime.datetime(2016, 9, 2, 18, 0), datetime.datetime(2016, 9, 2, 18, 15), datetime.datetime(2016, 9, 2, 18, 30), datetime.datetime(2016, 9, 2, 18, 45), datetime.datetime(2016, 9, 2, 19, 0), datetime.datetime(2016, 9, 3, 17, 0), datetime.datetime(2016, 9, 3, 17, 15), datetime.datetime(2016, 9, 3, 17, 30), datetime.datetime(2016, 9, 3, 17, 45), datetime.datetime(2016, 9, 3, 18, 0), datetime.datetime(2016, 9, 3, 18, 15), datetime.datetime(2016, 9, 3, 18, 30), datetime.datetime(2016, 9, 3, 18, 45), datetime.datetime(2016, 9, 3, 19, 0), datetime.datetime(2016, 9, 4, 17, 0), datetime.datetime(2016, 9, 4, 17, 15), datetime.datetime(2016, 9, 4, 17, 30), datetime.datetime(2016, 9, 4, 17, 45), datetime.datetime(2016, 9, 4, 18, 0), datetime.datetime(2016, 9, 4, 18, 15), datetime.datetime(2016, 9, 4, 18, 30), datetime.datetime(2016, 9, 4, 18, 45), datetime.datetime(2016, 9, 4, 19, 0), datetime.datetime(2016, 9, 5, 17, 0), datetime.datetime(2016, 9, 5, 17, 15), datetime.datetime(2016, 9, 5, 17, 30), datetime.datetime(2016, 9, 5, 17, 45), datetime.datetime(2016, 9, 5, 18, 0), datetime.datetime(2016, 9, 5, 18, 15), datetime.datetime(2016, 9, 5, 18, 30), datetime.datetime(2016, 9, 5, 18, 45)] 

Once you have the time, you can use the strftime method to convert them to strings.

+2
source

Here is an example of using custom date time

 from datetime import datetime start = datetime(1900,1,1,0,0,0) end = datetime(1900,1,2,0,0,0) 

Now you need to get timedelta (the difference between two dates or time.) Between start and end

 seconds = (end - start).total_seconds() 

Define an interval of 15 minutes

 from datetime import timedelta step = timedelta(minutes=15) 

Iterate over the range of seconds, with a delta time step of 15 minutes (900 seconds) and add it to start .

 array = [] for i in range(0, int(seconds), int(step.total_seconds())): array.append(start + timedelta(seconds=i)) print array [datetime.datetime(1900, 1, 1, 0, 0), datetime.datetime(1900, 1, 1, 0, 15), datetime.datetime(1900, 1, 1, 0, 30), datetime.datetime(1900, 1, 1, 0, 45), datetime.datetime(1900, 1, 1, 1, 0), ... 

At the end, you can format the datetime objects in the str view.

 array = [i.strftime('%Y-%m-%d %H:%M%:%S') for i in array] print array ['1900-01-01 00:00:00', '1900-01-01 00:15:00', '1900-01-01 00:30:00', '1900-01-01 00:45:00', '1900-01-01 01:00:00', ... 

You can format the datetime object in the first iteration. But it can hurt your eyes.

 array.append((start + timedelta(seconds=i)).strftime('%Y-%m-%d %H:%M%:%S')) 
+1
source

This is the final script that I wrote based on the answers to my question:

 from datetime import datetime from datetime import timedelta import calendar current_utc = datetime.utcnow().strftime("%Y-%m-%d-%H-%M-%S") current_year = int(current_utc.split("-")[0]) current_month = int(current_utc.split("-")[1]) current_date = int(current_utc.split("-")[2]) current_hour = int(current_utc.split("-")[3]) current_min = int(current_utc.split("-")[4]) current_sec = int(current_utc.split("-")[5]) #### To make minutes round to quarter #### min_range_1 = range(1,16) min_range_2 = range(16,31) min_range_3 = range(31,46) min_range_4 = range(46,60) if current_min in min_range_1: current_min = 15 elif current_min in min_range_2: current_min = 30 elif current_min in min_range_3: current_min = 45 elif current_min in min_range_4: current_hour = current_hour + 1 current_min = 0 else: print("Please check current minute.") current_sec = 00 date_range_31 = range(1,32) date_range_30 = range(1,31) month_days_31 = [1,3,5,7,8,10,12] month_days_30 = [4,6,9,11] if current_month in month_days_31: if current_date == 31: next_day_month = current_month + 1 next_day_date = 1 else: next_day_month = current_month next_day_date = current_date elif current_month == 2: if calendar.isleap(current_year): if current_date == 29: next_day_month = current_month + 1 next_day_date = 1 else: next_day_month = current_month next_day_date = current_date else: if current_date == 28: next_day_month = current_month + 1 next_day_date = 1 else: next_day_month = current_month next_day_date = current_date elif current_month in month_days_30: if current_date == 30: next_day_month = current_month + 1 next_day_date = 1 else: next_day_month = current_month next_day_date = current_date else: print("Please check the current month and date to procedd further.") if current_hour < 11: current_hour = 11 current_min = 15 next_day_date = current_date + 1 current_start = datetime(current_year,current_month,current_date,current_hour,current_min,current_sec) current_end = datetime(current_year,current_month,current_date,21,15,0) next_day_start = datetime(current_year,next_day_month,next_day_date,11,15,0) next_day_end = datetime(current_year,next_day_month,next_day_date,21,15,0) current_seconds = (current_end - current_start).total_seconds() next_day_seconds = (next_day_end - next_day_start).total_seconds() step = timedelta(minutes=15) current_day_array = [] next_day_array = [] for i in range(0, int(current_seconds), int(step.total_seconds())): current_day_array.append(current_start + timedelta(seconds=i)) for i in range(0, int(next_day_seconds), int(step.total_seconds())): current_day_array.append(next_day_start + timedelta(seconds=i)) current_day_array = [i.strftime('%Y-%m-%dT%H:%M%:%SZ') for i in current_day_array] print current_day_array 

Which produces the following output:

 ['2016-09-03T11:15:00Z', '2016-09-03T11:30:00Z', '2016-09-03T11:45:00Z', '2016-09-03T12:00:00Z', '2016-09-03T12:15:00Z', '2016-09-03T12:30:00Z', '2016-09-03T12:45:00Z', '2016-09-03T13:00:00Z', '2016-09-03T13:15:00Z', '2016-09-03T13:30:00Z', '2016-09-03T13:45:00Z', '2016-09-03T14:00:00Z', '2016-09-03T14:15:00Z', '2016-09-03T14:30:00Z', '2016-09-03T14:45:00Z', '2016-09-03T15:00:00Z', '2016-09-03T15:15:00Z', '2016-09-03T15:30:00Z', '2016-09-03T15:45:00Z', '2016-09-03T16:00:00Z', '2016-09-03T16:15:00Z', '2016-09-03T16:30:00Z', '2016-09-03T16:45:00Z', '2016-09-03T17:00:00Z', '2016-09-03T17:15:00Z', '2016-09-03T17:30:00Z', '2016-09-03T17:45:00Z', '2016-09-03T18:00:00Z', '2016-09-03T18:15:00Z', '2016-09-03T18:30:00Z', '2016-09-03T18:45:00Z', '2016-09-03T19:00:00Z', '2016-09-03T19:15:00Z', '2016-09-03T19:30:00Z', '2016-09-03T19:45:00Z', '2016-09-03T20:00:00Z', '2016-09-03T20:15:00Z', '2016-09-03T20:30:00Z', '2016-09-03T20:45:00Z', '2016-09-03T21:00:00Z', '2016-09-04T11:15:00Z', '2016-09-04T11:30:00Z', '2016-09-04T11:45:00Z', '2016-09-04T12:00:00Z', '2016-09-04T12:15:00Z', '2016-09-04T12:30:00Z', '2016-09-04T12:45:00Z', '2016-09-04T13:00:00Z', '2016-09-04T13:15:00Z', '2016-09-04T13:30:00Z', '2016-09-04T13:45:00Z', '2016-09-04T14:00:00Z', '2016-09-04T14:15:00Z', '2016-09-04T14:30:00Z', '2016-09-04T14:45:00Z', '2016-09-04T15:00:00Z', '2016-09-04T15:15:00Z', '2016-09-04T15:30:00Z', '2016-09-04T15:45:00Z', '2016-09-04T16:00:00Z', '2016-09-04T16:15:00Z', '2016-09-04T16:30:00Z', '2016-09-04T16:45:00Z', '2016-09-04T17:00:00Z', '2016-09-04T17:15:00Z', '2016-09-04T17:30:00Z', '2016-09-04T17:45:00Z', '2016-09-04T18:00:00Z', '2016-09-04T18:15:00Z', '2016-09-04T18:30:00Z', '2016-09-04T18:45:00Z', '2016-09-04T19:00:00Z', '2016-09-04T19:15:00Z', '2016-09-04T19:30:00Z', '2016-09-04T19:45:00Z', '2016-09-04T20:00:00Z', '2016-09-04T20:15:00Z', '2016-09-04T20:30:00Z', '2016-09-04T20:45:00Z', '2016-09-04T21:00:00Z'] 
0
source

Here is the Pandas solution:

 import pandas as pd l = (pd.DataFrame(columns=['NULL'], index=pd.date_range('2016-09-02T17:30:00Z', '2016-09-04T21:00:00Z', freq='15T')) .between_time('07:00','21:00') .index.strftime('%Y-%m-%dT%H:%M:%SZ') .tolist() ) 

Output:

 In [165]: l Out[165]: ['2016-09-02T17:30:00Z', '2016-09-02T17:45:00Z', '2016-09-02T18:00:00Z', '2016-09-02T18:15:00Z', '2016-09-02T18:30:00Z', '2016-09-02T18:45:00Z', '2016-09-02T19:00:00Z', '2016-09-02T19:15:00Z', '2016-09-02T19:30:00Z', '2016-09-02T19:45:00Z', '2016-09-02T20:00:00Z', '2016-09-02T20:15:00Z', '2016-09-02T20:30:00Z', '2016-09-02T20:45:00Z', '2016-09-02T21:00:00Z', '2016-09-03T07:00:00Z', '2016-09-03T07:15:00Z', '2016-09-03T07:30:00Z', '2016-09-03T07:45:00Z', '2016-09-03T08:00:00Z', '2016-09-03T08:15:00Z', '2016-09-03T08:30:00Z', '2016-09-03T08:45:00Z', '2016-09-03T09:00:00Z', '2016-09-03T09:15:00Z', '2016-09-03T09:30:00Z', '2016-09-03T09:45:00Z', '2016-09-03T10:00:00Z', '2016-09-03T10:15:00Z', '2016-09-03T10:30:00Z', '2016-09-03T10:45:00Z', '2016-09-03T11:00:00Z', '2016-09-03T11:15:00Z', '2016-09-03T11:30:00Z', '2016-09-03T11:45:00Z', '2016-09-03T12:00:00Z', '2016-09-03T12:15:00Z', '2016-09-03T12:30:00Z', '2016-09-03T12:45:00Z', '2016-09-03T13:00:00Z', '2016-09-03T13:15:00Z', '2016-09-03T13:30:00Z', '2016-09-03T13:45:00Z', '2016-09-03T14:00:00Z', '2016-09-03T14:15:00Z', '2016-09-03T14:30:00Z', '2016-09-03T14:45:00Z', '2016-09-03T15:00:00Z', '2016-09-03T15:15:00Z', '2016-09-03T15:30:00Z', '2016-09-03T15:45:00Z', '2016-09-03T16:00:00Z', '2016-09-03T16:15:00Z', '2016-09-03T16:30:00Z', '2016-09-03T16:45:00Z', '2016-09-03T17:00:00Z', '2016-09-03T17:15:00Z', '2016-09-03T17:30:00Z', '2016-09-03T17:45:00Z', '2016-09-03T18:00:00Z', '2016-09-03T18:15:00Z', '2016-09-03T18:30:00Z', '2016-09-03T18:45:00Z', '2016-09-03T19:00:00Z', '2016-09-03T19:15:00Z', '2016-09-03T19:30:00Z', '2016-09-03T19:45:00Z', '2016-09-03T20:00:00Z', '2016-09-03T20:15:00Z', '2016-09-03T20:30:00Z', '2016-09-03T20:45:00Z', '2016-09-03T21:00:00Z', '2016-09-04T07:00:00Z', '2016-09-04T07:15:00Z', '2016-09-04T07:30:00Z', '2016-09-04T07:45:00Z', '2016-09-04T08:00:00Z', '2016-09-04T08:15:00Z', '2016-09-04T08:30:00Z', '2016-09-04T08:45:00Z', '2016-09-04T09:00:00Z', '2016-09-04T09:15:00Z', '2016-09-04T09:30:00Z', '2016-09-04T09:45:00Z', '2016-09-04T10:00:00Z', '2016-09-04T10:15:00Z', '2016-09-04T10:30:00Z', '2016-09-04T10:45:00Z', '2016-09-04T11:00:00Z', '2016-09-04T11:15:00Z', '2016-09-04T11:30:00Z', '2016-09-04T11:45:00Z', '2016-09-04T12:00:00Z', '2016-09-04T12:15:00Z', '2016-09-04T12:30:00Z', '2016-09-04T12:45:00Z', '2016-09-04T13:00:00Z', '2016-09-04T13:15:00Z', '2016-09-04T13:30:00Z', '2016-09-04T13:45:00Z', '2016-09-04T14:00:00Z', '2016-09-04T14:15:00Z', '2016-09-04T14:30:00Z', '2016-09-04T14:45:00Z', '2016-09-04T15:00:00Z', '2016-09-04T15:15:00Z', '2016-09-04T15:30:00Z', '2016-09-04T15:45:00Z', '2016-09-04T16:00:00Z', '2016-09-04T16:15:00Z', '2016-09-04T16:30:00Z', '2016-09-04T16:45:00Z', '2016-09-04T17:00:00Z', '2016-09-04T17:15:00Z', '2016-09-04T17:30:00Z', '2016-09-04T17:45:00Z', '2016-09-04T18:00:00Z', '2016-09-04T18:15:00Z', '2016-09-04T18:30:00Z', '2016-09-04T18:45:00Z', '2016-09-04T19:00:00Z', '2016-09-04T19:15:00Z', '2016-09-04T19:30:00Z', '2016-09-04T19:45:00Z', '2016-09-04T20:00:00Z', '2016-09-04T20:15:00Z', '2016-09-04T20:30:00Z', '2016-09-04T20:45:00Z', '2016-09-04T21:00:00Z'] 
0
source

All Articles