-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathtime_utils.py
More file actions
executable file
·80 lines (67 loc) · 2.57 KB
/
Copy pathtime_utils.py
File metadata and controls
executable file
·80 lines (67 loc) · 2.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
from datetime import datetime, timezone, timedelta
from typing import Optional
def now():
# 创建北京时间时区(UTC+8)
beijing_tz = timezone(timedelta(hours=8))
# 获取当前北京时间
now = datetime.now(beijing_tz)
return now
def get_current_timestamp() -> str:
"""获取当前UTC时间戳,格式为ISO 8601
Returns:
ISO 8601格式的UTC时间字符串,如'2023-11-15T12:30:45.123456+00:00'
"""
return now().isoformat()
def get_duration(start: datetime, end: datetime):
return end - start
def format_datetime(
dt: Optional[datetime] = None,
fmt: str = '%Y-%m-%d %H:%M:%S') -> str:
"""格式化日期时间为指定字符串格式
Args:
dt: 要格式化的datetime对象,默认为当前本地时间
fmt: 日期时间格式字符串,默认为'%Y-%m-%d %H:%M:%S'
Returns:
格式化后的日期时间字符串
"""
if dt is None:
dt = datetime.now()
return dt.strftime(fmt)
def get_readable_time(modified_time: datetime):
if isinstance(modified_time, datetime):
# 创建东八区(北京时间)时区
beijing_tz = timezone(timedelta(hours=8))
# 如果 modified_time 没有时区信息,假设它是UTC时间,转换为东八区
if modified_time.tzinfo is None:
# 假设无时区的时间是UTC时间,转换为东八区
utc_time = modified_time.replace(tzinfo=timezone.utc)
modified_time = utc_time.astimezone(beijing_tz)
# 获取当前东八区时间
now = datetime.now(beijing_tz)
delta = now - modified_time
if delta.seconds < 10:
return '刚刚'
if 10 < delta.seconds < 60:
return f'{delta.seconds}秒前'
elif 60 <= delta.seconds < 3600:
return f'{delta.seconds // 60}分钟前'
elif 3600 <= delta.seconds < 86400:
return f'{delta.seconds // 3600}小时前'
elif 86400 <= delta.days < 30:
return f'{delta.days}天前'
elif 30 <= delta.days < 365:
return f'{delta.days // 30}个月前'
else:
return f'{delta.days // 365}年前'
return str(modified_time)
def parse_datetime(
datetime_str: str,
fmt: str = '%Y-%m-%d %H:%M:%S') -> datetime:
"""将字符串解析为datetime对象
Args:
datetime_str: 日期时间字符串
fmt: 解析格式,默认为'%Y-%m-%d %H:%M:%S'
Returns:
解析后的datetime对象
"""
return datetime.strptime(datetime_str, fmt)