python时间函数的使用-程序员宅基地

技术标签: 【python】  python  后端  开发语言  


Python时间与日期操作(datetime、time、calendar)

 相关模块

模块 说明
time time是一个仅包含与日期和时间相关的函数和常量的模块,在本模块中定义了C/C++编写的几个类。例如,struct_time类
datetime datetime是一个使用面向对象编程设计的模块,可以在Python中使用日期和时间。它定义了几个表示日期和时间的类
calendar 日历是一个提供函数的模块,以及与Calendar相关的几个类,它们支持将日历映像生成为text,html,….
locale 该模块包含用于格式化或基于区域设置分析日期和时间的函数。

UTC(CoordinatedUniversal Time,世界协调时)亦即格林威治天文时间,世界标准时间。在中国为UTC+8。

DST(DaylightSaving Time)即夏令时。是一种为节约能源而人为规定地方时间的制度,一般在天亮早的夏季人为将时间提前一小时

struct_time结构:

索引 字段
0 tm_year 2018,2019…
1 tm_mon  1 ~ 12
2 tm_mday 1 ~ 31
3 tm_hour 0 ~ 23
4 tm_min 0 ~ 59
5 tm_sec 0 ~ 61(60或61是闰秒)
6 tm_wday 0 ~ 6(0是星期一)
7 tm_yday 1 ~ 366(朱利安日)
8 tm_isdst 1,0,1,-1是决定是否为夏令时的旗帜
#自定义日期格式
def gestime():
    t=time.struct_time(tm_year=2021,tm_mon=11,tm_mday=21,tm_hour=12,tm_min=34,tm_sec=21,tm_wday=2,tm_yday=110,tm_isdst=0)
    print(t)

提示:

t=time.struct_time(tm_year=2021,tm_mon=11,tm_mday=21,tm_hour=12,tm_min=34,tm_sec=21,tm_wday=2,tm_yday=110,tm_isdst=0)
TypeError: structseq() takes at most 2 keyword arguments (9 given) 

由于自己写的不够真实,我们利用datetime生成一个

def gestime():
    tt=datetime.datetime(2000, 11, 30, 0, 0, 0).timetuple()
    print(tt)

 会输出一个:

time.struct_time(tm_year=2000, tm_mon=11, tm_mday=30, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=335, tm_isdst=-1)

time模块

   time模块,它提供了处理时间和表示之间转换的功能。help(time)之后可以知道time有2种时间表示形式:

        1、时间戳表示法,即以整型或浮点型表示的是一个以秒为单位的时间间隔。这个时间的基础值是从1970年的1月1号零点开始算起。

        2、元组格式表示法,这个元组有9个整型内容。分别表示不同的时间含义。

编号 方法 描述
1 time.time() 返回当前时间时刻,浮点数形式秒数,不支持参数
2 time.clock() 返回当前程序的cpu执行时间。为了测量不同方法的计算成本,time.clock的值比time.time()的值更有用。unix系统始终返回全部运行时间;而windows从第二次开始都是以第一次调用此函数时的时间戳作为基准
3 time.sleep(secs) 暂停调用线程secs秒,接受整型和浮点型参数。
4 time.gmtime([secs]) 将时间戳转换为UTC时间元组格式。接受一个浮点型时间戳参数,其默认值为当前时间戳。
5 time.localtime([secs]) 将时间戳转换为本地时间元组格式。接受一个浮点型时间戳参数,其默认值为当前时间戳。
6 time.asctime([tupletime]) 接受时间元组,并返回一个可读的24个字符的字符串,例如’Tue Dec 11 22:07:14 2019’,默认值为localtime()返回值。
7 time.ctime([secs]) 接受时间戳,转换为字符串。其默认值为当前时间戳。函数等价于asctime(localtime(seconds))。
8 time.mktime(tupletime) 将本地时间元组,转换为时间戳(浮点值,该时间点以秒为单位表示。)。接受一个时间元组,必选。
9 time.strftime(fmt[,tupletime]) 将时间元组以指定的格式(字符串fmt指定)转换为字符串形式。接受字符串格式化串、时间元组。时间元组为可选,默认为localtime()
10 time.strptime(str,fmt="")

根据格式字符串fmt解析str,并返回元组格式的时间。

strftime()的逆向过程。接受字符串,时间格式2个参数,都是必选

11 time.altzone 本地DST时区的偏移量(以秒为单位的UTC)。
12 time.tzset() 改变本地时区

 自定义格式:

格式  含义  备注
%a  本地(locale)简化星期名称
%A  本地完整星期名称
%b  本地简化月份名称
%B  本地完整月份名称
%c  本地相应的日期和时间表示
%d  一个月中的第几天(01 - 31)
%H  一天中的第几个小时(24小时制,00 - 23)
%I  第几个小时(12小时制,01 - 12)
%j  一年中的第几天(001 - 366)
%m  月份(01 - 12)
%M  分钟数(00 - 59)
%p  本地am或者pm的相应符
%S  秒(01 - 61)
%U  一年中的星期数。(00 - 53星期天是一个星期的开始。)第一个星期天之前的所有天数都放在第0周。
%w  一个星期中的第几天(0 - 6,0是星期天)
%W  和%U基本相同,不同的是%W以星期一为一个星期的开始。
%x  本地相应日期
%X  本地相应时间
%y  去掉世纪的年份(00 – 99)
%Y  完整的年份
%Z  时区的名字(如果不存在为空字符)
%%  ‘%’字符

 time模块重要属性

序号 属性 说明
1 time.timezone UTC和本地时区(不含DST)之间的偏移量,以秒计
2 time.tzname 关于(标准时区名称, 夏令时时区名称)的元组
3 time.altzone 当地夏令时时间与标准UTC时间的误差,以秒计
4 time.daylight 当地时间是否反映夏令时,默认为0
#自定义日期格式
def gestime():

    # 获取当前本地时间(生成一个字符串时间)
    localtime = time.localtime(time.time())
    print("Local current time :", localtime)

    # 当前时间格式化(字符串时间格式化,可以分别获取年月日,时分秒)
    curtime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    print(curtime)
    # 也可以使用asctime()进行时间格式化
    print(time.asctime(localtime))

输出: 

Local current time : time.struct_time(tm_year=2021, tm_mon=12, tm_mday=16, tm_hour=21, tm_min=27, tm_sec=0, tm_wday=3, tm_yday=350, tm_isdst=0)
2021-12-16 21:27:00
Thu Dec 16 21:27:00 2021

Process finished with exit code 0

Calendar模块

calendar模块提供与日历相关的功能,包括为给定的月份或年份打印文本日历的功能。

以下是calendar模块可用的功能函数列表

序号 函数 描述
1 Calendar(year,w = 2,l = 1,c = 6) 返回一个具有年份日历的多行字符串格式化为三列,以c个空格分隔。 w是每个日期的字符宽度;每行的长度为21 * w + 18 + 2 * c,l是每周的行数。
2 firstweekday( ) 返回当前设置每周开始的星期。默认情况下,当日历首次导入时设置为:0,表示为星期一。
3 isleap(year) 如果给定年份(year)是闰年则返回True;否则返回:False。
4 leapdays(y1,y2) 返回在范围(y1,y2)内的年份中的闰年总数。
5 Month(year,month,w = 2,l = 1) 返回一个多行字符串,其中包含年份月份的日历,每周一行和两个标题行。 w是每个日期的字符宽度;每行的长度为7 * w + 6。 l是每周的行数
6 Monthcalendar(year,month) 返回int类型的列表。每个子列表表示一个星期。年份月份以外的天数设置为0;该月内的日期设定为月份的第几日:1 ~ 31
7 Monthrange(year,month) 返回两个整数。第一个是年度月(month)的星期几的代码;第二个是当月的天数。表示星期几为0(星期一)至6(星期日);月份是1到12
8 Prcal(year,w = 2,l = 1,c = 6) 类似于:calendar.calendar(year,w,l,c)的打印
9 Prmonth(year,month,w = 2,l = 1) 类似于:calendar.month(year,month,w,l)的打印
10 setfirstweekday(weekday) 将每周的第一天设置为星期几的代码。星期几的代码为0(星期一)至6(星期日)。
11 timegm(tupletime) time.gmtime的倒数:以时间元组的形式接受时刻,并返回与从时代(epoch)开始的浮点数相同的时刻。
12 weekday(year,month,day) 返回给定日期的星期几的代码。星期几的代码为0(星期一)至6(星期日);月数是1(1月)到12(12月)。
#自定义日期格式
def gestime():
    import calendar
    cal = calendar.month(2018, 10);
    print(cal)
2019 10 20
    October 2018
Mo Tu We Th Fr Sa Su
 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


Process finished with exit code 0

datetime的用法: datetime是Python处理日期和时间的标准库。

#分别获取年月日
def test01():
    year = datetime.datetime.today().year
    month = datetime.datetime.today().month
    day = datetime.datetime.today().day
    print('{},{},{}'.format(year,month,day))

# 计算两个日期相差多少天
    d1 = date(2018, 10, 18);
    d2 = date(2017, 12, 31);

    print((d1 - d2).days);
# 当前日期
    curdate = date.today();
    print(curdate )

curdate = 2021-12-16 

# 计算十天之后的日期时间
    nowday = datetime.now();
    # timedelta类可以很容易地算出前几天和后几天的时刻。(timedelta(days= d, hours= h))
    # 还可以查看第几周对应的时间,例如:timedelta(weeks=20) 20周将被自动转化为天数
    # 前几天时刻,用减法。  后几天时刻,则用当前时间加上timedelta(days = d, hours= h)
    lastday = nowday + timedelta(days=10);
    print(str(lastday));
    print(lastday.ctime());  # ctime()  返回一个表示日期和时间的字符串。

    # 查看某一天是今年的第几天和第几周
    testday = date(2017, 8, 31);
    print(testday.isocalendar());  # isocalendar() 函数返回三元组    分别为:年份,周数,周几
    print(testday.timetuple());  # timetuple()  返回时间元祖

 2018-11-11 10:40:01.641845

Sun Nov 11 10:40:01 2018

(2017, 35, 4)

参考:Python时间与日期操作(datetime、time、calendar) - 阳光宝贝-沐沐 - 博客园 (cnblogs.com)icon-default.png?t=LA92https://www.cnblogs.com/pinpin/p/9882852.html 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/chehec2010/article/details/121981781

智能推荐

tp5项目上传到服务器,tp5上传到云服务器-程序员宅基地

文章浏览阅读253次。tp5上传到云服务器 内容精选换一换更新后端云服务器,可修改字段为后端云服务器的名称和权重,可以为性能好的服务器设置更大的权重,用来接收更多的流量。如果member绑定的负载均衡器的provisioning status不是ACTIVE,则不能更新该member。PUT /v2/{project_id}/elb/pools/{pool_id}/members/{member华为云帮助中心,为用户提..._tp5加密上传服务器

3、Ktor学习-ApplicationCall简介;-程序员宅基地

文章浏览阅读313次。  处理路由时,将获得ApplicationCall的上下文。  ApplicationCall提供对两个主要属性ApplicationRequest和ApplicationResponse的访问。 如其名称所示,它们对应于传入请求和传出响应。 除此之外,它还提供了一个ApplicationEnvironment,以及一些有用的函数来帮助响应客户端请求。 鉴于管道可以异步执行,Applicati..._ktor call获取响应体

【VRRP主备切换】VRRP&STP&OSPF&NAT&3A_基于vrrp+ospf的主备切换-程序员宅基地

文章浏览阅读3.3k次。实验拓扑实验环境两台PC分属VLAN10与VLAN20,PC1为.10网段,PC2为.20网段SW6为傻瓜交换机SW7,SW8上针对两个VLAN分别做VRRP,同时运行STPR1为路由器,在R1上做NAT,R2模拟外网VRRPVRRP虚拟出一个网关设备,主机填写虚拟网关地址(vrid),主机的所有流量发送到虚拟网关设备,再由虚拟网关设备,发送给真实网关设备进行转发数据。正常情况下由mater网关设备管理这个虚拟MAC地址,转发用户数据。当Master失效后,其他设备其中一个设备成为Maste_基于vrrp+ospf的主备切换

tensorflow GPU版本的正确配置过程_tensorflow如何配对gpu-程序员宅基地

文章浏览阅读1.7k次,点赞3次,收藏19次。首先声明:以下均为 Linux(Ubuntu 14.04)环境下,且采用 miniconda(anaconda也可以)进行安装之前配置过一次,虽然最终配好了,但是稀里糊涂的,尤其是CUDA、cudnn、tensorflow 三者版本的问题,之前的配置过程可以看这里。前几天到了新公司,又要配置了,折腾了半天终于算是搞明白应该怎么配置了。顺便提一下,感觉 tensorflow 官网的这个版本图不..._tensorflow如何配对gpu

Logback使用_logback的maxhistory使用方法-程序员宅基地

文章浏览阅读179次。一、什么是Logback Logback是由log4j创始人设计的又一个开源日志组件。logback当前分成三个模块:logback-core,logback- classic和logback-access。logback-core是其它两个模块的基础模块。logback-classic是log4j的一个 改良版本。此外logback-classic完整实现SLF4J API使你可以很方便..._logback的maxhistory使用方法

SpringBoot复习笔记;突击面试专用;_springboot 面试笔记-程序员宅基地

文章浏览阅读158次。Springboot自动装配特性?SpringBoot如何不使用tomcat启动?SpringBoot的复习笔记,用于突击面试;_springboot 面试笔记

随便推点

二叉排序树BST+求树深度算法_设计求二叉排序树深度的算法-程序员宅基地

文章浏览阅读2k次,点赞2次,收藏2次。#include "stdio.h"#include "malloc.h"typedef struct node { int key; struct node *lchild, *rchild; }BSTNode, *BSTree;void InsertBST(BSTree *bst, int key){ BSTree s; if (*bst == NULL) { s_设计求二叉排序树深度的算法

c++01背包模版_c++ 背包模板-程序员宅基地

文章浏览阅读668次。01背包dp先找个题目装箱问题需要考虑的就是这件物品放不放题目要求所有物品体积价值最大最后再减一下就好了#include<bits/stdc++.h>using namespace std;int maxv, n;int f[35][20005];//答案存在这!int v[35];//这件物品所需空间int main() { cin >> maxv >> n; for (int i = 1; i <= n; i++) cin >&_c++ 背包模板

微信小程序大学校园二手教材与书籍拍卖系统设计与实现_基于微信公众号的大学校园二手教材与书籍拍卖系统-程序员宅基地

文章浏览阅读569次。目前人们所熟知的二手交易平台如转转、闲鱼等,作为综合型二手交易平台涵盖了大量的商品,但是无法满足很多大学生对于专业书籍的选择以及学习资料的获取,很多大学生还在通过他人介绍来实现二手书籍的交易,结合而当前大学生二手交易的现状,利用微信小程序应用的便捷性开发设计一款针对大学校园环境内的二手教材及书籍拍卖系统,利用该系统实现在线的书籍教材拍卖,通过竞拍和加价的方式来实现书籍的交易,满足学生书籍需求的同时也实现了资源的再利用。关键词:微信小程序;1.4.2 Mysql数据库 2。1.4.3 JAVA语言 3。_基于微信公众号的大学校园二手教材与书籍拍卖系统

解决Linux下同时使用有线和无线网络时,网络连接的优先级问题_linux以太网和无线网冲突问题-程序员宅基地

文章浏览阅读3.2w次,点赞18次,收藏76次。问题是这样的:本人自己用一台Linux服务器,平时当FTP和爬虫用。还有一台mac开发用,经常需要用网线和linux通过网线直连来传输数据和控制服务器。蛋疼的事发生了:Linux服务器一旦插上网线,网络流量就只能经过有线网络了,导致Linux服务器不能上网。 查了很多资料,在我的服务器上都行不通。最后终于用route路由表配置默认网关解决了。具体方法很简单,如下:1.查看当前网关信息 ip rou_linux以太网和无线网冲突问题

AFLW2000-3D数据库介绍及自带代码使用-程序员宅基地

文章浏览阅读5.4k次,点赞3次,收藏17次。简介:AFLW2000-3D由AFLW数据库的前2000张图片及其三维信息组成。三维信息由3DMM重建(Blanz et.al A morphable model for the synthesis of 3d faces, SIGGRAPH'99)得到,并且包含68个特征点的三维信息。该数据库的三维数据精准度存在争议。数据库自带了matlab处理的代码,可以将人脸三维数据用3DMM表示。..._aflw2000-3d

从前端程序员的视角看小程序的稳定性保障_小程序稳定性怎么提高-程序员宅基地

文章浏览阅读1.2k次。当我们谈业务稳定性的时候,通常是指后端工程师从架构的角度来看的,例如限流和降级、流量调度、业务开关、容量压测等,但监控也是整个业务稳定性建设中不可或缺的一环,例如对业务和前端的监控,以保证出现问题的时候,可以第一时间找到根因所在。今天,我们就结合小程序的场景,来看看如何做好小程序的监控。 本文转载至InfoQ大前端技术号「前端之巅」,作者慕扉,阿里巴巴高级前端工程师。 小程..._小程序稳定性怎么提高