> 文章列表 > Python datetime基本使用

Python datetime基本使用

Python datetime基本使用

time和datetime的区别

  • time

time提供的功能更加接近操作系统层面,主要调用C平台的C libarary的同名函数,表现的日期范围仅限于1970-2038。
这里的time指的是大模块的time,不是datetime中的time

import timeif __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 datetimeif __name__ == '__main__':print(datetime.datetime.now())

运行结果

2023-04-23 08:36:02.819775

datetime常见用法

获取当前时间戳

from datetime import datetimeif __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, timedeltaif __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 datetimeif __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得到的类型:timedeltaprint(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