time和datetime的区别
- time
time提供的功能更加接近操作系统层面,主要调用C平台的C libarary的同名函数,表现的日期范围仅限于1970-2038。
这里的time指的是大模块的time,不是datetime中的time
import time
if __name__ == '__main__':
# 获取时间戳
print(time.time())
# 获取时间元组
print(time.localtime())
运行结果
1682209857.7490914
time.struct_time(tm_year=2023, tm_mon=4, tm_mday=23, tm_hour=8, tm_min=30, tm_sec=57, tm_wday=6, tm_yday=113, tm_isdst=0)
- datetime
datetime功能更加丰富,个人一般喜欢用datetime。
import datetime
if __name__ == '__main__':
print(datetime.datetime.now())
运行结果
2023-04-23 08:36:02.819775
datetime常见用法
获取当前时间戳
from datetime import datetime
if __name__ == '__main__':
## 或者用time.time()也可以
print(datetime.timestamp(datetime.now()))
# 1682210363.43843
时间戳转时间
def stamp_to_datetime(timestamp):
return datetime.strftime(datetime.fromtimestamp(timestamp), '%Y-%m-%d %H:%M:%S')
if __name__ == '__main__':
# 获取时间戳
timestamp = datetime.timestamp(datetime.now())
# 格式化时间(这里的时间戳通过time.time()获取也行)
string_date_time = stamp_to_datetime(timestamp)
print(string_date_time)
# 结果 2023-04-23 08:42:49
日期转字符串
def datetime_to_string(dt):
return datetime.strftime(dt, '%Y-%m-%d %H:%M:%S')
if __name__ == '__main__':
print(datetime_to_string(datetime.now()))
# 结果 2023-04-23 08:45:27
字符串转日期
def string_to_datetime(date_str):
return datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S')
if __name__ == '__main__':
print(string_to_datetime('2023-08-23 00:00:00'))
日期加减
from datetime import datetime, timedelta
if __name__ == '__main__':
# 明天
next_day = datetime.now() + timedelta(days=1)
print(next_day)
# 昨天
pre_day = datetime.now() - timedelta(days=1)
print(pre_day)
# 下一个小时
next_hour = datetime.now() + timedelta(hours=1)
print(next_hour)
# 上一个小时
pre_hour = datetime.now() - timedelta(hours=1)
print(pre_day)
# 下一分钟
next_minute = datetime.now() + timedelta(minutes=1)
print(next_minute)
# 上一分钟
pre_minute = datetime.now() - timedelta(minutes=1)
print(pre_minute)
日期间隔
from datetime import datetime
if __name__ == '__main__':
now_dt = datetime.now()
future_dt = datetime.strptime('2023-05-01 00:00:00', '%Y-%m-%d %H:%M:%S')
gap = future_dt - now_dt
# datetime-datetime得到的类型:timedelta
print(type(gap))
# 相差天数
print(gap.days)
# 相差秒
print(gap.seconds)
# 相差微妙
print(gap.microseconds)
运行结果
<class 'datetime.timedelta'>
7
13387
175852
json中的时间
-
序列化
import json from datetime import datetime
class Student:
def init(self, name: str, birthday: datetime):
self.name = name
self.birthday = birthday
def json_serial(obj):
“”“JSON serializer for objects not serializable by default json code”“”
if isinstance(obj, datetime):
return datetime.strftime(obj, '%Y-%m-%d %H:%M:%S')
raise TypeError("Type %s not serializable" % type(obj))
if name == ‘main’:
std = Student(‘admin’, datetime.now())
with open(‘student.txt’, mode=‘w’) as fp:
json.dump(std.dict, fp, indent=4, default=json_serial)
文件中新增内容
```python
{
"name": "admin",
"birthday": "2023-04-23 20:29:25"
}
-
反序列化
import json from datetime import datetime
class Student:
def init(self, name, birthday: datetime):
self.name = name
self.birthday = birthday
def DecodeDateTime(std):
if ‘birthday’ in std:
std[“birthday”] = datetime.strptime(std[“birthday”], ‘%Y-%m-%d %H:%M:%S’)
return std
if name == ‘main’:
with open(file=‘student.txt’, mode=‘r’) as fp:
str = fp.read()
student_obj = Student(**json.loads(str, object_hook=DecodeDateTime))
print(type(student_obj.birthday))
print(student_obj.birthday)
结果
```python
<class 'datetime.datetime'>
2023-04-23 20:29:25