71 lines
1.5 KiB
Python
71 lines
1.5 KiB
Python
from datetime import datetime
|
|
|
|
from .sys import system_sudo, CalledProcessError
|
|
|
|
__all__ = ['str_datetime', 'datetime_str', 'set_datetime']
|
|
|
|
|
|
def str_datetime(expr: str) -> datetime:
|
|
"""
|
|
|
|
:param expr: format datetime(yyyy,mm,dd,HH,MM,SS)
|
|
:return:
|
|
"""
|
|
if not (expr.startswith('datetime(') and expr.endswith(')')):
|
|
raise ValueError('illegal datetime format : ' + expr)
|
|
|
|
c = datetime.now()
|
|
|
|
p = expr[9:-1].split(',')
|
|
|
|
y = c.year
|
|
m = c.month
|
|
d = c.day
|
|
H = c.hour
|
|
M = c.minute
|
|
S = c.second
|
|
|
|
if len(p) > 0 and len(p[0]) > 0:
|
|
y = int(p[0])
|
|
if y < 2000:
|
|
y += 2000
|
|
|
|
if len(p) > 1 and len(p[1]) > 0:
|
|
m = int(p[1])
|
|
|
|
if len(p) > 2 and len(p[2]) > 0:
|
|
d = int(p[2])
|
|
|
|
if len(p) > 3 and len(p[3]) > 0:
|
|
H = int(p[3])
|
|
|
|
if len(p) > 4 and len(p[4]) > 0:
|
|
M = int(p[4])
|
|
|
|
if len(p) > 5 and len(p[5]) > 0:
|
|
S = int(p[5])
|
|
|
|
if len(p) > 6:
|
|
raise ValueError('illegal datetime format : ' + expr)
|
|
|
|
# check valid datetime
|
|
return datetime(y, m, d, H, M, S)
|
|
|
|
|
|
def datetime_str(d: datetime = None) -> str:
|
|
if d is None:
|
|
d = datetime.now()
|
|
return 'datetime(%d,%d,%d,%d,%d,%d)' % (d.year, d.month, d.day, d.hour, d.minute, d.second)
|
|
|
|
|
|
def set_datetime(d: datetime):
|
|
"""set system datetime.
|
|
|
|
:param d:
|
|
:return:
|
|
"""
|
|
try:
|
|
system_sudo('date', '-s', '%d/%d/%d %d:%d:%d' % (d.year, d.month, d.day, d.hour, d.minute, d.second))
|
|
except CalledProcessError:
|
|
pass
|