119 lines
2.6 KiB
Python
119 lines
2.6 KiB
Python
# -*- coding: UTF-8 -*-
|
||
import calendar
|
||
from datetime import timedelta
|
||
|
||
from django.utils import timezone
|
||
|
||
|
||
def timestamp_of(d):
|
||
if hasattr(d, 'isoformat'):
|
||
return calendar.timegm(d.utctimetuple())
|
||
return None
|
||
|
||
|
||
def now():
|
||
return timezone.localtime(timezone.now())
|
||
|
||
|
||
def midnight():
|
||
return now().replace(hour=0, minute=0, second=0, microsecond=0)
|
||
|
||
|
||
def is_today(tme):
|
||
if day_of(tme) != day_of(midnight()):
|
||
return False
|
||
return True
|
||
|
||
|
||
def current_time_n(n):
|
||
return now() - timedelta(days=n)
|
||
|
||
|
||
def day_n(n):
|
||
"""Midnight of N days ago."""
|
||
return midnight() - timedelta(days=n)
|
||
|
||
|
||
def day_of(d):
|
||
"""Returns date part."""
|
||
return str(d.date())
|
||
|
||
|
||
def midnight_of(d):
|
||
"""
|
||
Args:
|
||
d : datetime object
|
||
Return:
|
||
Midnight of datetime.
|
||
"""
|
||
d = timezone.localtime(d)
|
||
return d.replace(hour=0, minute=0, second=0, microsecond=0)
|
||
|
||
|
||
def day_start(date):
|
||
"""返回 date 这天的开始时间
|
||
|
||
Args:
|
||
date: `Datetime` 对象
|
||
|
||
Returns:
|
||
返回 date 这天的开始时间(0 点),`Datetime` 对象
|
||
"""
|
||
return timezone.localtime(date).replace(hour=0, minute=0, second=0, microsecond=0)
|
||
|
||
|
||
def week_start(date):
|
||
"""返回 date 这天所在周的开始时间
|
||
|
||
Args:
|
||
date: `Datetime` 对象
|
||
|
||
Returns:
|
||
返回 date 这天所在周开始时间(周一),`Datetime` 对象
|
||
"""
|
||
return timezone.localtime(date) + dateutil.relativedelta.relativedelta(
|
||
weekday=dateutil.relativedelta.MO(-1), hour=0, minute=0, second=0, microsecond=0
|
||
)
|
||
|
||
|
||
def month_start(d):
|
||
"""返回 date 这天所在月的开始时间
|
||
|
||
Args:
|
||
date: `Datetime` 对象
|
||
|
||
Returns:
|
||
返回 date 这天所在月的开始时间(1号),`Datetime` 对象
|
||
"""
|
||
return timezone.localtime(d) + dateutil.relativedelta.relativedelta(
|
||
day=1, hour=0, minute=0, second=0, microsecond=0
|
||
)
|
||
|
||
|
||
def month_end(d):
|
||
"""返回 date 这天所在月的结束时间,即最后一天的 23:59:59
|
||
|
||
Args:
|
||
data: `Datetime` 对象
|
||
|
||
Returns:
|
||
返回 date 这天所在月的最后一天的 23:59:59 的时间
|
||
"""
|
||
start = month_start(d)
|
||
month_days = calendar.monthrange(start.year, start.month)[1]
|
||
return start + timedelta(days=month_days, seconds=-1)
|
||
|
||
|
||
def year_start(d):
|
||
"""返回 date 这天所在年的开始时间
|
||
|
||
Args:
|
||
date: `Datetime` 对象
|
||
|
||
Returns:
|
||
返回 date 这天所在年的开始时间(1月 1号),`Datetime` 对象
|
||
"""
|
||
return timezone.localtime(d) + dateutil.relativedelta.relativedelta(
|
||
month=1, day=1, hour=0, minute=0, second=0, microsecond=0
|
||
)
|