4. Examples

datetime.datetime instance can be used as an argument value as well as time-string in the following examples.

Note

Use not the DST offset, but the standard time offset when you use datetime string as an argument. DateTimeRange class automatically calculate daylight saving time. Some examples are below

>>>from datetimerange import DateTimeRange
>>>time_range = DateTimeRange("2015-03-08T00:00:00-0400", "2015-03-08T12:00:00-0400")
>>>time_range.timedelta
datetime.timedelta(0, 39600)  # 11 hours
>>>from datetimerange import DateTimeRange
>>>time_range = DateTimeRange("2015-11-01T00:00:00-0400", "2015-11-01T12:00:00-0400")
>>>time_range.timedelta
datetime.timedelta(0, 46800)  # 13 hours

4.1. Create a DateTimeRange instance from start and end datetime

Sample Code
from datetimerange import DateTimeRange
time_range = DateTimeRange("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
str(time_range)
Output
'2015-03-22T10:00:00+0900 - 2015-03-22T10:10:00+0900'

4.2. Compare time ranges

Sample Code
from datetimerange import DateTimeRange
lhs = DateTimeRange("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
rhs = DateTimeRange("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
print("lhs == rhs: ", lhs == rhs)
print("lhs != rhs: ", lhs != rhs)
Output
lhs == rhs:  True
lhs != rhs:  False

4.3. Move the time range

Sample Code
import datetime
from datetimerange import DateTimeRange
value = DateTimeRange("2015-03-22T10:10:00+0900", "2015-03-22T10:20:00+0900")
print(value + datetime.timedelta(seconds=10 * 60))
print(value - datetime.timedelta(seconds=10 * 60))
Output
2015-03-22T10:20:00+0900 - 2015-03-22T10:30:00+0900
2015-03-22T10:00:00+0900 - 2015-03-22T10:10:00+0900

4.4. Change string conversion format

Sample Code
from datetimerange import DateTimeRange
time_range = DateTimeRange("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
time_range.start_time_format = "%Y/%m/%d"
time_range.end_time_format = "%Y/%m/%dT%H:%M:%S%z"
time_range
Output
2015/03/22 - 2015/03/22T10:10:00+0900

4.5. Add elapsed time when conversion to string

Sample Code
from datetimerange import DateTimeRange
time_range = DateTimeRange("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
time_range.is_output_elapse = True
time_range
Output
2015-03-22T10:00:00+0900 - 2015-03-22T10:10:00+0900 (0:10:00)

4.6. Change separator of the converted string

Sample Code
from datetimerange import DateTimeRange
time_range = DateTimeRange("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
time_range.separator = " to "
time_range
Output
2015-03-22T10:00:00+0900 to 2015-03-22T10:10:00+0900

4.7. Get start time as datetime.datetime

Sample Code
from datetimerange import DateTimeRange
time_range = DateTimeRange("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
time_range.start_datetime
Output
datetime.datetime(2015, 3, 22, 10, 0, tzinfo=tzoffset(None, 32400))

4.8. Get start time as string (formatted with start_time_format)

Sample Code
from datetimerange import DateTimeRange
time_range = DateTimeRange("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
print(time_range.get_start_time_str())
time_range.start_time_format = "%Y/%m/%d %H:%M:%S"
print(time_range.get_start_time_str())
Output
2015-03-22T10:00:00+0900
2015/03/22 10:00:00

4.9. Get end time as datetime.datetime

Sample Code
from datetimerange import DateTimeRange
time_range = DateTimeRange("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
time_range.end_datetime
Output
datetime.datetime(2015, 3, 22, 10, 10, tzinfo=tzoffset(None, 32400))

4.10. Get end time as string (formatted with end_time_format)

Sample Code
from datetimerange import DateTimeRange
time_range = DateTimeRange("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
print(time_range.get_end_time_str())
time_range.end_time_format = "%Y/%m/%d %H:%M:%S"
print(time_range.get_end_time_str())
Output
2015-03-22T10:10:00+0900
2015/03/22 10:10:00

4.11. Get datetime.timedelta (from start_datetime to the end_datetime)

Sample Code
from datetimerange import DateTimeRange
time_range = DateTimeRange("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
time_range.timedelta
Output
datetime.timedelta(0, 600)

4.12. Get timedelta as seconds (from start_datetime to the end_datetime)

Sample Code
from datetimerange import DateTimeRange
time_range = DateTimeRange("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
time_range.get_timedelta_second()
Output
600.0

4.13. Get an iterator

Sample Code 1
import datetime
from datetimerange import DateTimeRange

time_range = DateTimeRange("2015-01-01T00:00:00+0900", "2015-01-04T00:00:00+0900")
for value in time_range.range(datetime.timedelta(days=1)):
    print(value)
Output 1
2015-01-01 00:00:00+09:00
2015-01-02 00:00:00+09:00
2015-01-03 00:00:00+09:00
2015-01-04 00:00:00+09:00
Sample Code 2
from datetimerange import DateTimeRange
from dateutil.relativedelta import relativedelta

time_range = DateTimeRange("2015-01-01T00:00:00+0900", "2016-01-01T00:00:00+0900")
for value in time_range.range(relativedelta(months=+4)):
    print(value)
Output 2
2015-01-01 00:00:00+09:00
2015-05-01 00:00:00+09:00
2015-09-01 00:00:00+09:00
2016-01-01 00:00:00+09:00

4.14. Set start time

Sample Code
from datetimerange import DateTimeRange
time_range = DateTimeRange()
print(time_range)
time_range.set_start_datetime("2015-03-22T10:00:00+0900")
print(time_range)
Output
NaT - NaT
2015-03-22T10:00:00+0900 - NaT

4.15. Set end time

Sample Code
from datetimerange import DateTimeRange
time_range = DateTimeRange()
print(time_range)
time_range.set_end_datetime("2015-03-22T10:10:00+0900")
print(time_range)
Output
NaT - NaT
NaT - 2015-03-22T10:10:00+0900

4.16. Set time range (set both start and end time)

Sample Code
from datetimerange import DateTimeRange
time_range = DateTimeRange()
print(time_range)
time_range.set_time_range("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
print(time_range)
Output
NaT - NaT
2015-03-22T10:00:00+0900 - 2015-03-22T10:10:00+0900

4.17. Test whether the time range is set

Sample Code
from datetimerange import DateTimeRange
time_range = DateTimeRange()
print(time_range.is_set())
time_range.set_time_range("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
print(time_range.is_set())
Output
False
True

4.18. Validate time inversion

Sample Code
from datetimerange import DateTimeRange
time_range = DateTimeRange("2015-03-22T10:10:00+0900", "2015-03-22T10:00:00+0900")
try:
    time_range.validate_time_inversion()
except ValueError:
    print("time inversion")
Output
time inversion

4.19. Test whether the time range is valid

Sample Code
from datetimerange import DateTimeRange
time_range = DateTimeRange()
print(time_range.is_valid_timerange())
time_range.set_time_range("2015-03-22T10:20:00+0900", "2015-03-22T10:10:00+0900")
print(time_range.is_valid_timerange())
time_range.set_time_range("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
print(time_range.is_valid_timerange())
Output
False
False
True

4.20. Test whether a value within the time range

Sample Code
from datetimerange import DateTimeRange

time_range = DateTimeRange("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
print("2015-03-22T10:05:00+0900" in time_range)
print("2015-03-22T10:15:00+0900" in time_range)

time_range_smaller = DateTimeRange("2015-03-22T10:03:00+0900", "2015-03-22T10:07:00+0900")
print(time_range_smaller in time_range)
Output
True
False
True

4.21. Test whether a value intersects the time range

Sample Code
from datetimerange import DateTimeRange
time_range = DateTimeRange("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
x = DateTimeRange("2015-03-22T10:05:00+0900", "2015-03-22T10:15:00+0900")
time_range.is_intersection(x)
Output
True

4.22. Make an intersected time range

Sample Code
from datetimerange import DateTimeRange
time_range = DateTimeRange("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
x = DateTimeRange("2015-03-22T10:05:00+0900", "2015-03-22T10:15:00+0900")
time_range.intersection(x)
Output
2015-03-22T10:05:00+0900 - 2015-03-22T10:10:00+0900

4.23. Make an subtracted time range

Sample Code
from datetimerange import DateTimeRange
time_range = DateTimeRange("2015-01-22T09:50:00+0900", "2015-01-22T10:00:00+0900")
x = DateTimeRange("2015-01-22T09:55:00+0900", "2015-01-22T09:56:00+0900")
time_range.subtract(x)
Output
[2015-01-22T09:50:00+0900 - 2015-01-22T09:55:00+0900,
 2015-01-22T09:56:00+0900 - 2015-01-22T10:00:00+0900]

4.24. Make an encompassed time range

Sample Code
from datetimerange import DateTimeRange
time_range = DateTimeRange("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
x = DateTimeRange("2015-03-22T10:05:00+0900", "2015-03-22T10:15:00+0900")
time_range.encompass(x)
Output
2015-03-22T10:00:00+0900 - 2015-03-22T10:15:00+0900

4.25. Truncate time range

Sample Code
from datetimerange import DateTimeRange

time_range = DateTimeRange("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
time_range.is_output_elapse = True
print("before truncate: ", time_range)

time_range.truncate(10)
print("after truncate:  ", time_range)
Output
before truncate:  2015-03-22T10:00:00+0900 - 2015-03-22T10:10:00+0900 (0:10:00)
after truncate:   2015-03-22T10:00:30+0900 - 2015-03-22T10:09:30+0900 (0:09:00)