2024-01-26 01:52:03 +08:00
|
|
|
from datetime import datetime, timedelta
|
|
|
|
|
|
|
|
from dateutil import parser
|
|
|
|
|
2024-01-27 01:08:02 +08:00
|
|
|
from felicity.core.config import get_settings
|
2024-01-26 01:52:03 +08:00
|
|
|
|
|
|
|
settings = get_settings()
|
|
|
|
|
|
|
|
|
|
|
|
def get_time_now(str_format=True) -> str | datetime:
|
|
|
|
if settings.TIMEZONE_AWARE:
|
|
|
|
now = datetime.now(settings.TIMEZONE)
|
|
|
|
else:
|
|
|
|
now = datetime.now()
|
2024-05-22 12:29:25 +08:00
|
|
|
str_time = now.strftime(settings.DATETIME_STR_FORMAT)
|
2024-01-26 01:52:03 +08:00
|
|
|
if str_format:
|
2024-05-22 12:29:25 +08:00
|
|
|
return str_time
|
|
|
|
return datetime.strptime(str_time, settings.DATETIME_STR_FORMAT)
|
2024-01-26 01:52:03 +08:00
|
|
|
|
|
|
|
|
|
|
|
def to_datetime(date_value: str) -> datetime:
|
|
|
|
return parser.parse(date_value)
|
|
|
|
|
|
|
|
|
|
|
|
def datetime_math(date_val: str | datetime, days: int, addition=True) -> datetime:
|
|
|
|
if isinstance(date_val, str):
|
|
|
|
date_val: datetime = to_datetime(date_val)
|
|
|
|
|
|
|
|
if addition:
|
|
|
|
return date_val + timedelta(days=days) # noqa
|
|
|
|
else:
|
|
|
|
return date_val - timedelta(days=days) # noqa
|
|
|
|
|
|
|
|
|
|
|
|
def format_datetime(
|
2024-09-22 23:15:27 +08:00
|
|
|
dat_value: str | datetime, human_format=False, with_time=True
|
2024-01-26 01:52:03 +08:00
|
|
|
) -> str:
|
2024-09-21 00:17:55 +08:00
|
|
|
if not dat_value:
|
|
|
|
return ""
|
|
|
|
|
2024-01-26 01:52:03 +08:00
|
|
|
if human_format:
|
|
|
|
if with_time:
|
|
|
|
_format = settings.DATETIME_HUMAN_FORMAT
|
|
|
|
else:
|
|
|
|
_format = settings.DATE_HUMAN_FORMAT
|
|
|
|
else:
|
|
|
|
if with_time:
|
|
|
|
_format = settings.DATETIME_STR_FORMAT
|
|
|
|
else:
|
|
|
|
_format = settings.DATE_STR_FORMAT
|
|
|
|
|
|
|
|
if isinstance(dat_value, datetime):
|
|
|
|
return dat_value.strftime(_format)
|
|
|
|
|
|
|
|
return to_datetime(dat_value).strftime(_format)
|
|
|
|
|
|
|
|
|
|
|
|
def make_tz_aware(unaware: str | datetime):
|
|
|
|
if isinstance(unaware, datetime):
|
|
|
|
return unaware.replace(tzinfo=settings.TIMEZONE)
|
|
|
|
return datetime.strptime(unaware, settings.DATETIME_STR_FORMAT).replace(
|
|
|
|
tzinfo=settings.TIMEZONE
|
|
|
|
)
|