Source code for py_utilities.time.date_utilities

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import calendar
from datetime import datetime
from datetime import timedelta
import random
import time

"""
Epoch represented as a struct_time (Thursday, January 1, 1970)
"""
EPOCH_AS_STRUCT_TIME = time.gmtime(0)

"""
Epoch represented as a datetime (Thursday, January 1, 1970)
"""
EPOCH_AS_DATETIME = datetime(*EPOCH_AS_STRUCT_TIME[:6])


[docs]def is_leap_year(year): """ Returns true if the year is a leap year, false otherwise >>> is_leap_year(2008) True >>> is_leap_year(2012) True >>> is_leap_year(2013) False """ return calendar.isleap(year)
[docs]def is_weekday(date): """ Returns true if date is a weekday, false otherwise >>> date = datetime.now() >>> last_friday = date - timedelta(days=date.weekday()) \ + timedelta(days=4, weeks=-1) >>> is_weekday(last_friday) True """ return date.isoweekday() < 6
[docs]def is_weekend(date): """ Returns true if date is a weekend, false otherwise >>> date = datetime.now() >>> last_friday = date - timedelta(days=date.weekday()) \ + timedelta(days=4, weeks=-1) >>> is_weekend(last_friday) False """ return date.isoweekday() > 5
[docs]def next_day(date, day): """ Returns the next day (as a datetime) with respect to date. Day parameter is in isoweekday format (Monday 1, Sunday 7). """ days_ahead = day - date.isoweekday() if 0 > days_ahead: days_ahead += 7 return date + timedelta(days=days_ahead)
[docs]def random_datetime(start_timestamp, end_timestamp, tz=None): """ Returns a random datetime between two timestamps and converts to the tz if provided """ assert end_timestamp > start_timestamp interval = end_timestamp - start_timestamp random_timestamp = start_timestamp + (random.random() * interval) return datetime.fromtimestamp(random_timestamp, tz) # vim: filetype=python