Python datetime基本使用

news/2024/10/22 15:31:49/

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

http://www.ppmy.cn/news/49117.html

相关文章

redis 主从模式、哨兵模式、cluster模式的区别

参考&#xff1a; ​https://blog.csdn.net/qq_41071876/category_11284995.html https://blog.csdn.net/weixin_45821811/article/details/119421774 https://blog.csdn.net/weixin_43001336/article/details/122816402 Redis有三种模式&#xff0c;分别是&#xff1a;主…

kafka集群topic重新分配leader

1.案例 当kafka集群的broker节点宕机重启后,此broker节点的partition分区的leader节点会被选举为其它broker节点,此broker节点恢复后就会导致配分不均衡 可以看到所有partition的leader节点都在broker id为1的节点上,原来是平均分配到3个broker节点上,replicas项的首位…

Hi3861 硬件 i2c 驱动 oled

一、前言 最近想用 3861 做个有意思的东西&#xff0c;记录一下开发过程。今天使用 3861 的硬件 i2c 驱动 oled。 硬件平台&#xff1a;Bearpi-Nano 软件SDK&#xff1a;润和sdk 二、搬一个 OLED 轮子 我之前写过一篇基于 stm32cubemx 快速使用 iic 接口 oled 的过程&#xff0…

如何区分高压和低压电阻接地系统

电阻接地系统或电阻接地中性线系统是通过一个或多个电阻在中性线和大地之间有意连接的系统。在这些系统中&#xff0c;接地故障期间造成的损坏远小于在牢固接地系统中接地故障期间造成的损坏&#xff0c;并且设备上的机械应力也大大降低。 电阻通常具有比接近接地点的系统电抗…

探索Linux设备树:硬件描述与驱动程序的桥梁

目录标题 引言&#xff1a;Linux设备树简介 | Introduction: Linux Device Tree Overviewa. 设备树的背景与发展 | Background and Development of Device Treeb. 设备树的作用与意义 | The Role and Significance of Device Tree 设备树语法与结构 | Device Tree Syntax and S…

回归预测 | MATLAB实现GA-GRU遗传算法优化门控循环单元的数据多输入单输出回归预测

回归预测 | MATLAB实现GA-GRU遗传算法优化门控循环单元的数据多输入单输出回归预测 目录 回归预测 | MATLAB实现GA-GRU遗传算法优化门控循环单元的数据多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 MATLAB实现GA-GRU遗传算法优化门控循环单元的数据…

无法启动此程序,因为计算机中丢失VCRUNTIME140.dll”错误的解决办法

vcruntime140.dll是什么什么文件呢&#xff1f;为什么电脑在运行一些游戏或许软件的时候会出现丢失vcruntime140.dll&#xff0c;然后游戏或许软件运行失败?这个dll文件是电脑重要的运行库文件。丢失了会导致很多程序无法运行。 首先打开电脑浏览器以后在顶部网页栏目输入&am…

跨平台开发工具怎么选?IDE工具推荐

软件开发工具链的价值&#xff0c;越来越多企业看到了它。近年来&#xff0c;国内也迎来了软件开发工具的自主化浪潮&#xff0c;今天就来跟大家盘点一下2023年十大移动开发IDE工具。 一、Android Studio 作为Android开发IDE工具的首选&#xff0c;Android Studio提供了一个全…