File: //home/arjun/projects/buyercall/buyercall/lib/util_datetime.py
import datetime
import pytz
from dateutil import tz
from flask_login import current_user
def tzware_datetime():
"""
Return a timezone aware datetime.
:return: Datetime
"""
return datetime.datetime.now(pytz.utc)
def timedelta_months(months, compare_date=None):
"""
Return a new datetime with a month offset applied.
:param months: Amount of months to offset
:type months: int
:param compare_date: Date to compare at
:type compare_date: date
:return: datetime
"""
if compare_date is None:
compare_date = datetime.date.today()
delta = months * 365 / 12
compare_date_with_delta = compare_date + datetime.timedelta(delta)
return compare_date_with_delta
def format_date_to_excel(date):
""" Format a local date for consumption by Excel
"""
if not date:
return ''
return date.strftime('%Y-%m-%d %H:%M:%S')
def combine_date_and_time(date, time):
""" Combine a date and time by converting dates and times into timedelta
"""
if '/' in date:
format_date = datetime.date(int(date.split('/')[0]), int(date.split('/')[1]), int(date.split('/')[2]))
else:
format_date = datetime.date(int(date.split('-')[0]), int(date.split('-')[1]), int(date.split('-')[2]))
format_time = datetime.time(int(time.split(':')[0]), int(time.split(':')[1]))
combined_date_time = datetime.datetime.combine(format_date, format_time)
return combined_date_time
def convert_to_deltatime(time):
""" Convert time string to a delta time to perform time base actions
"""
datetime_time = datetime.datetime.strptime(time, "%H:%M")
time_delta = datetime.timedelta(hours=datetime_time.hour, minutes=datetime_time.minute)
return time_delta
def week_day(number_of_day):
""" Convert number of day into week day text
"""
days = {0: 'sunday', 1: 'monday', 2: 'tuesday', 3: 'wednesday', 4: 'thursday', 5: 'friday', 6: 'saturday'}
day_of_week = days.get(number_of_day)
return day_of_week
def convert_to_local_datetime(utc_datetime):
"""
Convert the utc datetime to the datetime of current user.
"""
if utc_datetime:
try:
# Get current user timezone
if current_user.agent:
if current_user.agent.timezone:
user_zone = current_user.agent.timezone
else:
user_zone = 'US/Eastern'
else:
user_zone = 'US/Eastern'
# Get timezone info from user's timezone string
tz_info = tz.gettz(user_zone)
# Set the tzinfo as utc
from_zone = tz.tzutc()
utc_datetime.replace(tzinfo=from_zone)
# Convert utc datetime to user's timezone
tza_local_datetime = utc_datetime.astimezone(tz_info)
return tza_local_datetime
except Exception as e:
return utc_datetime
return
def tza_to_date(tza_datetime):
"""Convert TimeZone Aware datetime to date
"""
if tza_datetime:
# Format the datetime to get the date in needed format
tza_local_datetime = convert_to_local_datetime(tza_datetime)
if tza_local_datetime:
return tza_local_datetime.strftime('%Y-%m-%d')
return
def tza_to_datetime(tza_datetime):
"""Convert TimeZone Aware datetime to formatted datetime
"""
if tza_datetime:
# Format the datetime to get the date in needed format
tza_local_datetime = convert_to_local_datetime(tza_datetime)
if tza_local_datetime:
return tza_local_datetime.strftime('%Y-%m-%d %I:%M:%S %p')
return
def tza_to_leadtime(tza_datetime):
"""Convert TimeZone Aware datetime to formatted datetime
"""
if tza_datetime:
# Format the datetime to get the date in needed format
tza_local_datetime = convert_to_local_datetime(tza_datetime)
if tza_local_datetime:
return tza_local_datetime.strftime("%b %d, %I:%M %p ")
return