Python基础学习笔记(六)日期与时间
off999 2024-09-13 13:30 65 浏览 0 评论
本节知识大纲:
一、时间日期基本介绍
时间日期类型在Python中主要有两个模块:time模块和datetime模块
time模块:是基于Unix Timestamp(时间戳)实现的,所能表述的范围被限定在1970-2038年之间;
时间戳:是指格林尼治时间1970年01月01日00时00分00秒起至现在的总秒数,结果是一个浮点数。
二、时间日期类型--time模块
1. 获取当前时间戳
print(time.time())案例:
获取一个程序执行了多少秒
import time
start_time = time.time()
sum = 0
for i in range(1000000):
sum += i
end_time = time.time()
print("程序执行了%f秒"%(end_time - start_time))输出结果:
程序执行了0.128733秒2. 将时间戳转化为标准时间日期格式
如何将一个浮点数时间戳转为标准时间日期格式
通过时间元组进行转换,使用time.localtime(时间戳)把获取的时间戳转为当地的时间元组,使用time.gmtime(时间戳)把获取的时间戳转为格林尼治时间元组;如果不加参数,默认为当前时间戳。
import time
time_tuple = time.localtime(time.time())
print("当前时间为{}年{}月{}日{}点{}分{}秒".format(time_tuple[0],time_tuple[1],time_tuple[2],time_tuple[3],time_tuple[4],time_tuple[5]))3. 格式化时间
(1)以(RPC)标准时间格式输出时间
time.asctime(time.localtime()) # 参数为时间元组
time.ctime(time.time()) # 参数为浮点数时间戳输出结果:Thu Jun 25 10:31:48 2020
(2)以time.strftime()格式化时间
# 格式化成2020-06-25 11:18:29形式
print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()))
# 格式化成Thu Jun 25 11:18:29 2020形式
print(time.strftime("%a %b %d %H:%M:%S %Y",time.localtime()))注意:strftime语句中时间格式化符号中是不能包含中文的,如果想输出中文,还是通过上面%语句输出或者format格式输出。
Python时间格式化符号:
4. 将时间元组转化为时间戳
可以使用time.mktime()方法将时间元组转化为时间戳。我们可以自定义时间元祖,但是必须要填入9个参数, 比如2008年8月8日,晚上8点8分8秒的时间元组为(2008,8,8,20,8,8,0,0,0)未知的参数可以使用0代替。
5. 让程序暂停运行
time.sleep(秒数)可以让程序运行指定秒数。
三、time模块案例演示
案例:
2008年8月8日,20:08:08往后88,888,888秒是哪天?星期几?
import time
# time.mktime()方法可以把时间元组转为时间戳
tuple01 = (2008,8,8,20,8,8,0,0,0)
# 待求时间戳
time01 = time.mktime(tuple01) + 88888888
# 待求时间元组
tuple02 = time.localtime(time01)
# 打印结果
print("结果:",time.strftime("%Y-%m-%d %H:%M:%S",tuple02),end="\t")
tuple_week = ("星期一","星期二","星期三","星期四","星期五","星期六","星期天")
print(tuple_week[tuple02[6]])输出结果:
结果: 2011-06-03 15:29:36 星期五四、datetime模块基本使用
datetime模块:
比time模块功能更加强大,主要可以使用下面五个类:
1. date类
获取今天的日期
date01 = datetime.date.today()返回的结果是2020-06-26 可以对年、月、日各个属性单独访问:
print("年份",date01.year)
print("月份",date01.month)
print("日期",date01.day)2. time类
time类可以直接定义当前的时间,精确到微秒
time01 = datetime.time(8,23,2,121212)可以对时、分、秒、微秒各个属性单独访问:
print("时",time01.hour)
print("分",time01.minute)
print("秒",time01.second)
print("微秒",time01.microsecond)3. datetime类
获取日期和时间(年份、月份、日期、时 分、秒、微秒、时区)
datetime01 = datetime.datetime.now()4. 三种类型的转换
(1)datetime中去date
datetime01.date()(2)datetime中取time
datetime01.time()(3)date和time组合成datetime
datetime.datetime.combine(date01,time01)5. timeDelta时间差
计算两个指定日期之间的天数
date01 = datetime.date(2020,6,26)
date02 = datetime.date(2016,11,23)
print((date01-date02).days) 五、import关键字
import关键字表示引入外部某一个功能模块
1. 引入模块
引用整个模块:import <模块名>,表示我们需要引入整个datetime模块,包含了该模块下的所有类。当我们要调用某一个类时必须要携带模块名
import datetime
print(datetime.datetime.now())2. 引入模块中的指定类
如果引入模块中的部分类:from <模块名> import <类名>,当我们要调用该类时不需要声名模块名
from datetime import datetime
print(datetime.now())3. 引入模块中的多个类
如果要引用模块中的多个类可以用逗号隔开,比如
from datetime import date,time,timedelta我们也可以使用
from datetime import *虽然是引入了模块下的所有类,但是实际函数调用的时候也是无需加上模块名也可以直接调用的
from datetime import *
print(datetime.now())六、datetime基本使用
1. 获取当前时间
from datetime import datetime
print(datetime.now()) # 获取当前日期时间
print(datetime.today()) # 获取当前时间
print(datetime.utcnow()) # 获取当前的格林尼治时间输出结果:
2020-06-26 16:35:43.928699
2020-06-26 16:35:43.928732
2020-06-26 08:35:43.9287412. 获取当前日期时间的日期和时间
from datetime import datetime
dt01 = datetime.today()
print(dt01.date())
print(dt01.time())输出结果:
2020-06-26
16:35:43.9295833. 获取日期时间的年、月、日、时、分、秒、微秒
from datetime import datetime
dt01 = datetime.today()
print(dt01.year)
print(dt01.month)
print(dt01.day)
print(dt01.hour)
print(dt01.minute)
print(dt01.second)
print(dt01.microsecond)输出结果:
2020
6
26
16
35
43
9295834. 构造一个datetime
from datetime import datetime
dt01 = datetime(2008,8,8,20,8,8,888888)
print(dt01)输出结果:
2008-08-08 20:08:08.8888885. RPC方式格式化时间--ctime
from datetime import datetime
dt01 = datetime.today()
print(dt01.ctime())输出结果:
Fri Jun 26 16:38:35 20206. 自定义方式格式化
# 时间格式化符号方式
from datetime import datetime
dt01 = datetime.today()
print(dt01.strftime("%Y-%m-%d %H:%M:%S"))输出结果:
2020-06-26 16:38:35时间格式化符号中是不能直接加入中文的,如果想输出中文日期时间,还是得通过传统格式化输出方式
# 加入中文
from datetime import datetime
dt01 = datetime.today()
print("%d年%d月%d日"%(dt01.year,dt01.month,dt01.day))输出结果:
2020年6月26日七、日期时间类型转换
time类型怎么与datetime类型相互转换
1. time类型转换为datetime类型
使用fromtimestamp()方法
from time import time
from datetime import datetime
time01 = time() # 获取当前时间
print("转化前",time01)
print("转化后",datetime.fromtimestamp(time01)) 输出结果:
转化前 1593160246.8704221
转化后 2020-06-26 16:30:46.8704222. datetime类型怎么转换为time类型
使用timestamp()方法
from time import time
from datetime import datetime
datetime01 = datetime.today()
print("转化前",datetime01)
print("转化成时间戳",datetime01.timestamp())
print("转化为时间元组",datetime01.timetuple())输出结果:
转化前 2020-06-26 16:30:46.870481
转化成时间戳 1593160246.870481
转化为时间元组 time.struct_time(tm_year=2020, tm_mon=6, tm_mday=26, tm_hour=16, tm_min=30, tm_sec=46, tm_wday=4, tm_yday=178, tm_isdst=-1)八、时间日期的运算
1. 计算两个指定时间的时间差
from datetime import datetime
dt01 = datetime(2020,6,26,12,12,12,121212)
dt02 = datetime(2016,5,26,11,12,12,121202)
print((dt01-dt02).days)
print((dt01-dt02).seconds)
print((dt01-dt02).microseconds)
print(dt01.strftime("%Y-%m-%d %H:%M:%S"),end="和")
print(dt02.strftime("%Y-%m-%d %H:%M:%S"),end="相差")
print((dt01-dt02).days,"天",(dt01-dt02).seconds,"秒",(dt01-dt02).microseconds,"毫秒")输出结果:
1492
3600
10
2020-06-26 12:12:12和2016-05-26 11:12:12相差1492 天 3600 秒 10 毫秒2. 对某个时间段增加或减少指定时间
from datetime import datetime,timedelta
# 对某一个时间增加或者减少
dt01 = datetime(2020,6,26,12,12,12,121212)
print("100天之后",dt01 + timedelta(days=100))
print("100天之前",dt01 + timedelta(days=-100))
print("100周之后",dt01 + timedelta(weeks=100))
print("100小时之后",dt01 + timedelta(hours=100))
print("100秒之后",dt01 + timedelta(seconds=100))输出结果:
100天之后 2020-10-04 12:12:12.121212
100天之前 2020-03-18 12:12:12.121212
100周之后 2022-05-27 12:12:12.121212
100小时之后 2020-06-30 16:12:12.121212
100秒之后 2020-06-26 12:13:52.121212九、时间日期案例演示
案例:
准备10个人姓名,然后为这10个人随机生成生日【都是90后】
- 统计出哪些人是夏季【6月-8月】出生的
- 最大的比最小的大多少天
- 谁的生日最早,谁的生日最晚
from datetime import date,datetime
from random import randint
# 为每个人构建生日
def build_birthday(list_person_name:list):
# 初始化存储姓名:生日字典
name_birthday = {}.fromkeys(list_person_name)
# 生成生日
for key in name_birthday:
temp_year = randint(1990,1999)
temp_month = randint(1,12)
temp_day = randint(1,30)
name_birthday[key] = date(temp_year,temp_month,temp_day)
# 返回
return name_birthday
# 获得夏天出生的人的列表
def person_birthday_summer(name_birthday:dict):
# 用于存储夏天出生的key
list_person = []
for key in name_birthday:
if name_birthday[key].month>=6 and name_birthday[key].month<=8:
list_person.append(key)
# 返回
return list_person
# 获得最大与最小的人出生隔了多少天
def get_person_year_max_min(name_birthday:dict):
# 在字典中提取出生日
person_birthday = name_birthday.values()
distance_birthday = max(person_birthday) - min(person_birthday)
return distance_birthday.days
# 获得最早的生日
def get_person_early_birthday(name_birthday:dict):
for key in name_birthday:
# 把所有的人的出生年份替换为1990年,忽略年龄对比较生日日期的影响
name_birthday[key] = name_birthday[key].replace(year=1990)
person_birth = list(name_birthday.values())
return sorted(person_birth)[0]
# 获得最早生日的人的姓名
def get_person_from_early_birthday_name(name_birthday:dict):
early_birthday = get_person_early_birthday(name_birthday)
for key in name_birthday:
if name_birthday[key] == early_birthday:
early_birthday_name = key
return early_birthday_name
# 获得最迟的生日
def get_person_later_birthday(name_birthday:dict):
for key in name_birthday:
name_birthday[key] = name_birthday[key].replace(year=1990)
person_birth = list(name_birthday.values())
return sorted(person_birth)[len(person_birth)-1]
# 获得最迟生日的人的姓名
def get_person_from_later_birthday_name(name_birthday:dict):
later_birthday = get_person_later_birthday(name_birthday)
for key in name_birthday:
if name_birthday[key] == later_birthday:
later_birthday_name = key
return later_birthday_name
if __name__ == '__main__':
list_name = ["赵一","钱二","孙三","李四","周五","吴六","郑七","王八","冯九","陈十"]
# 为十个人生成生日
name_birthday = build_birthday(list_name)
print(name_birthday)
# 统计出哪些人是在夏天出生的
birthday_summer_list = person_birthday_summer(name_birthday)
if (len(birthday_summer_list) == 0):
print("没有人的生日在夏天")
else:
print("生日为夏天的有:",birthday_summer_list)
# 最大的比最小的大多少天
distance = get_person_year_max_min(name_birthday)
print("最大的比最小的大%d天"%distance)
# 生日最早的
early_birthday = get_person_early_birthday(name_birthday)
print("生日最早的是%d月%d日"%(early_birthday.month,early_birthday.day))
name_of_early_birthday = get_person_from_early_birthday_name(name_birthday)
print("生日最早的人的姓名是",name_of_early_birthday)
# 生日最迟的
later_birthday = get_person_later_birthday(name_birthday)
print("生日最迟的是%d月%d日"%(later_birthday.month,later_birthday.day))
name_of_later_birthday = get_person_from_later_birthday_name(name_birthday)
print("生日最迟的人的姓名是",name_of_later_birthday)输出结果:
{'赵一': datetime.date(1998, 4, 17), '钱二': datetime.date(1997, 10, 11), '孙三': datetime.date(1997, 7, 26), '李四': datetime.date(1993, 8, 28), '周五': datetime.date(1995, 8, 9), '吴六': datetime.date(1990, 10, 12), '郑七': datetime.date(1998, 7, 18), '王八': datetime.date(1994, 1, 9), '冯九': datetime.date(1997, 8, 24), '陈十': datetime.date(1999, 9, 1)}
生日为夏天的有: ['孙三', '李四', '周五', '郑七', '冯九']
最大的比最小的大3246天
生日最早的是1月9日
生日最早的人的姓名是 王八
生日最迟的是10月12日
生日最迟的人的姓名是 吴六为了让结构清晰我们使用了函数,下一节我们将重点讲解函数用法。
相关推荐
- 台式电脑线路安装步骤图(台式电脑怎么安装线路图)
-
安装电脑线路需要以下步骤:首先,确定电脑所需的线路类型,如电源线、网线等。然后,将线路插头与相应的接口连接,确保插头与接口对应正确。接下来,将线路沿着合适的路径布置,避免过度弯曲或拉扯。在布置线路时,...
- qq空间触屏版登录入口(qq空间登录入口首页)
-
z.qq.com可以通过以下方式登录手机QQ空间:1、使用手机登录手机腾讯网3g.qq.com,点击“空间”,根据提示QQ号码和QQ密码就可以登录;2、通过手机直接输入手机QQ空间网址z.qq.co...
- 笔记本电脑开机密码怎么关闭
-
1、用户账户密码取消 取消用户账户密码的方法比较简单,在“控制面板”中的“用户账户”中,选择你要修改的账户,然后点“删除我的密码”的选项,选择“删除密码”即可,也可以在选择更改密码时,把新密码留空,...
- 鼠标usb设备无法识别(鼠标usb设备无法识别win10)
-
1.前置USB线接错。当主板上的USB线和机箱上的前置USB接口对应相接时把正负接反就会发生这类故障,这也是相当危险的,因为正负接反很可能会使得USB设备烧毁。所以尽量采用机箱后置的USB接口,也少...
-
- 腾讯游戏实名认证中心官网(腾讯游戏实名制平台)
-
腾讯游戏实名认证非常的简单,首先,打开腾讯游戏实名注册网址:jkyx.qq.com打开jkyx.qq.com,登陆你的QQ账号,如果你的QQ账号已经实名注册了,该网站就能看到已注册的信息的。如果还未实名注册的玩家,就可以在该网站按照要求填...
-
2025-12-24 19:03 off999
- 电脑城照片(电脑照的相片在哪里找)
-
开平的电脑城在市府文化广场旁边那条桥的桥头(光明路),美媛电脑城,不过好像很破烂,此外曙光路很多电脑店。有三家电子/电脑城,其中最大两家在107国道沙井上南加油站路段两旁,那里有很多电子零件和电脑...
- kali linux安装教程(kali linux最新版安装教程)
-
KaliLinux官方正确安装方法为先从官网下载最新版本的ISO镜像文件,然后使用软件如Rufus将ISO文件写入U盘或DVD,接着在计算机启动时选择U盘或DVD作为启动设备,进入KaliLinu...
- asus电脑开不了机怎么办(华硕电脑开不机怎么办)
-
1、检查电源和电源适配器如果华硕笔记本无法开机,首先要排查电源和电源适配器是否正常工作。可以检查电源适配器是否插紧,是否有松动或断裂。另外,可以更换电源适配器或更换电池,看是否可以开机。2、检查硬件连...
- bios硬盘启动项是哪个(电脑bios硬盘启动)
-
1、开机按F2(具体按键看开机屏幕提示)进入BIOS系统,打开Boot选项卡;2、在Boot页面下找到IDE1,一般这个表示的就是电脑硬盘,按键盘上的F6将该启动项向上移至第一位,也就是将硬盘设为第一...
- 虚拟机ubuntu安装教程(ubuntu 虚拟机安装)
-
在虚拟机Ubuntu下安装MATLAB的步骤如下:1.下载MATLAB安装包:访问MATLAB官网,选择适合你的Ubuntu版本的MATLAB安装包,并下载到本地计算机。2.安装虚拟机软件:在Ub...
- bootmgrismissing开机不了怎么办
-
你是不是没打全?大概意思就是启动的东西缺失!重装系统或者是补充装修复系统引导bootmgr丢失无法开机的解决方法:1、重新启动计算机,如果遇到“BOOTMGRismissing”错误,可以尝试的第...
- 手机上怎么改路由器密码(手机上怎么改路由器密码wifi密码)
-
输入地址打开手机浏览器后在地址栏输入路由器地址,打开路由器登录界面。2/4点击常用设置输入路由器管理员密码后进入路由器主界面,点击上方的常用设置。3/4找到密码在窗口中分别找到2.4G和5Gwifi...
- windowsserver2016(windowsserver2016激活密钥)
-
WindowsServer2016代表着微软发布的一款服务器操作系统。它是2016年推出的,为企业提供了强大的功能和稳定性,支持大规模的数据中心和云计算环境。WindowsServer2016...
- 联想手机官网查询真伪入口(联想手机正品查询)
-
官方查询页面http://support1.lenovo.com.cn/lenovo/wsi/我认为联想本本一旦出厂就自然就可以查询号码了。因为我们单位订购的一批联想本本,直接从上海生产基地把本本...
- 中国电信官方测网速(网络测速 中国电信)
-
你好,你可以下载一个第三方软件进行测速,如果你手机自带测速软件直接可以测速的,也可以下载电信测速软件。1.进入中国电信官方测速网站。 说明:中国电信宽带测速是根据网络行业网速标准制定的专业测速工具,...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
python入门到脱坑 输入与输出—str()函数
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
失业程序员复习python笔记——条件与循环
-
系统u盘安装(win11系统u盘安装)
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
