HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
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