Python 内置模块之 时间模块 datetime

概述

datatime模块重新封装了time模块,提供更多接口,datetime库定义了2个常量和5个类。

2个常量分别是:

  1. MINYEAR=1
  2. MAXYEAR=9999

5个类分别是:

  1. date类:表示日期的类
  2. time类:表示时间的类
  3. datetime类:表示时间日期的类
  4. timedelta类:表示两个datetime对象的差值;
  5. tzinfo类:表示时区的相关信息

1、date类

构造函数

__new__(year,month,day):默认的构造函数,创建date类的对象时直接传入year,month,day三个参数即可返回对应的日期。fromtimestamp(t):使用时间戳构造对象,使用方法为:datetime.date.fromtimestamp(t),传入参数t为一个时间戳,返回时间戳t对应的日期。today():使用今天的日期构造对象,使用方法为:datetime.date.today(),无参数,返回今天的日期。fromordinal(n):使用日期序数构造对象,使用方法为:datetime.date.fromordinal(n),传入参数为一个整数序数,代表从公元1年1月1日开始的序数,序数每增加1代表增加1天,返回最终计算出的日期。

方法

  1. timetuple():返回日期对应的time.struct_time对象,格式为time.struct_time(tm_year=1, tm_mon=1, tm_mday=2, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=2, tm_isdst=-1) 。
  2. toordinal():相当于fromordinal(n)的逆过程,返回值即为fromordinal(n)中的日期序数n。
  3. weekday():返回该日期对应星期几,用[0,6]代表星期一到星期日。
  4. isoweekday():作用同weekday(),用[1,7]代表星期一到星期日。
  5. isocalendar():返回一个三元组,格式为(year,week_number,weekday),分别代表年,第几周,星期几。
  6. isoformat():返回标准日期格式:YYYY-MM-DD。
  7. ctime():返回格式为:Sat Sep 8 00:00:00 2018
  8. strftime(format):把日期按照format指定的格式进行格式化,具体的格式化符号如下。
  9. replace(year,month,day):传入参数为year,month,day,返回对应的新日期。
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%f 小数秒(000000-999999)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身eg:
%Y-%m-%d %H:%M:%S.%f    2021-11-11 10:52:16.000001

示例

from datetime import *
import timeprint('date.max:', date.max)             # date.max: 9999-12-31
print('date.min:', date.min)             # date.min: 0001-01-01
print('date.today():', date.today())     # date.today(): 2016-10-26
print('date.fromtimestamp():', date.fromtimestamp(time.time()))   # date.fromtimestamp(): 2016-10-26now = date(2016, 10, 26)
tomorrow = now.replace(day = 27)
print('now:', now, ', tomorrow:', tomorrow)   # now: 2016-10-26 , tomorrow: 2016-10-27
print('timetuple():', now.timetuple())        # timetuple(): time.struct_time(tm_year=2016, tm_mon=10, tm_mday=26, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=300, tm_isdst=-1) 
print('weekday():', now.weekday())            # weekday(): 2 
print('isoweekday():', now.isoweekday())      # isoweekday(): 3
print('isocalendar():', now.isocalendar())    # isocalendar(): (2016, 43, 3)
print('isoformat():', now.isoformat())        # isoformat(): 2016-10-26
print('strftime():', now.strftime("%Y-%m-%d"))# strftime(): 2016-10-26

2、time类

构造函数

__new__(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, fold=0):默认的构造函数,创建time类的对象时直接传入相应参数即可返回对应的时间。

方法

  1. isoformat():返回标准时间格式:HH:MM:SS.mmmmmm+zz:zz。
  2. strftime(format):把时间按照format指定的格式进行格式化,具体的格式化符号与date类中介绍的相同。
  3. utcoffset():返回timezone的偏移量。
  4. tzname():返回timezone的名称。
  5. replace():传入对应的参数,返回新的时间。

示例

from  datetime import *tm = time(23, 46, 10)
print('tm:', tm)
print('hour: %d, minute: %d, second: %d, microsecond: %d' % (tm.hour, tm.minute, tm.second, tm.microsecond))
tm1 = tm.replace(hour=20)
print('tm1:', tm1)
print('isoformat():', tm.isoformat())
print('strftime()', tm.strftime("%X"))# tm: 23:46:10
# hour: 23, minute: 46, second: 10, microsecond: 0
# tm1: 20:46:10
# isoformat(): 23:46:10
# strftime() 23:46:10

3、datetime类

datetime类是date类和time类的合体,包含前两个类的全部参数。

构造函数

__new__(year, month, day, hour=0, minute=0, second=0,microsecond=0, tzinfo=None, fold=0):默认的构造函数,创建datetime类的对象时直接传入相应参数即可返回对应的时间日期。fromtimestamp(t):使用时间戳构造对象,传入参数t为一个时间戳,返回时间戳t对应的日期和时间。utcfromtimestamp(t):使用时间戳构造对象,传入参数t为一个时间戳,返回时间戳t对应的UTC(时间标准时间)日期和时间。now():使用当前日期和时间构造对象,无参数,返回当前的日期和时间。utcnow():使用当前日期和时间构造对象,无参数,返回当前的UTC(时间标准时间)日期和时间。combine(date,time):使用date和time构造对象,传入参数为1个date对象和1个time对象,返回计算出的日期。

方法

  1. timetuple():返回日期时间对应的time.struct_time对象,格式为time.struct_time(tm_year=1973, tm_mon=11, tm_mday=29, tm_hour=21, tm_min=33, tm_sec=9, tm_wday=3, tm_yday=333, tm_isdst=-1) 。
  2. utctimetuple():与timetuple()相似,返回日期时间对应的UTC(时间标准时间)time.struct_time对象。
  3. astimezone():返回的格式中加入时区信息,格式为:1973-11-29 21:33:09+08:00。
  4. date():返回date部分
  5. time():返回time部分,tzinfo设置为None。(另有timetz()方法返回有相同tzinfo的time())
  6. isoformat(sep):返回标准日期时间格式,传入参数sep可设置日期和时间的分隔符,默认为'T':1973-11-29T21:33:09。
  7. ctime():返回格式为:Sat Sep 8 00:00:00 2018
  8. strftime(format):把日期按照format指定的格式进行格式化,具体的格式化符号与date类中介绍的相同。
  9. strptime(date_string,format):将字符串格式转换为日期格式,具体的格式化符号与date类中介绍的相同。
  10. replace():传入对应的参数,返回新的日期时间。

示例

from  datetime import *
import timeprint('datetime.max:', datetime.max)
print('datetime.min:', datetime.min)
print('datetime.resolution:', datetime.resolution)
print('today():', datetime.today())
print('now():', datetime.now())
print('utcnow():', datetime.utcnow())
print('fromtimestamp(tmstmp):', datetime.fromtimestamp(time.time()))
print('utcfromtimestamp(tmstmp):', datetime.utcfromtimestamp(time.time()))# datetime.max: 9999-12-31 23:59:59.999999
# datetime.min: 0001-01-01 00:00:00
# datetime.resolution: 0:00:00.000001
# today(): 2016-10-26 23:12:51.307000
# now(): 2016-10-26 23:12:51.307000
# utcnow(): 2016-10-26 15:12:51.307000
# fromtimestamp(tmstmp): 2016-10-26 23:12:51.307000
# utcfromtimestamp(tmstmp): 2016-10-26 15:12:51.307000

4、timedelta类

timedelta类代表两个datetime对象之间的时间差。

构造函数

__new__(days=0, seconds=0, microseconds=0,milliseconds=0, minutes=0, hours=0, weeks=0):默认的构造函数,创建timedelta类的对象时直接传入相应参数即可返回对应单位的时间差。

方法

  1. 支持两个timedelta对象之间的加、减操作。
  2. 支持对一个timedelta进行取正、取负、取绝对值等操作。
  3. 支持两个timedelta对象之间的比较。
  4. 支持一个timedelta对象乘以、除以一个整数的操作

示例

# coding:utf-8
from  datetime import *dt = datetime.now()
dt1 = dt + timedelta(days=-1) # 昨天
dt2 = dt - timedelta(days=1)  # 昨天
dt3 = dt + timedelta(days=1)  # 明天
delta_obj = dt3-dt
print(type(delta_obj),delta_obj)                  # <type 'datetime.timedelta'> 1 day, 0:00:00
print(delta_obj.days ,delta_obj.total_seconds())  # 1 86400.0

5、tzinfo类

tzinfo类是一个虚拟基类,代表时区(time zone),创建子类时必须重写name(),utcoffset(),dst()这三个方法。

#! /usr/bin/python
# coding=utf-8from datetime import datetime, tzinfo,timedelta"""
tzinfo是关于时区信息的类
tzinfo是一个抽象类,所以不能直接被实例化
"""
class UTC(tzinfo):"""UTC"""def __init__(self,offset = 0):self._offset = offsetdef utcoffset(self, dt):return timedelta(hours=self._offset)def tzname(self, dt):return "UTC +%s" % self._offsetdef dst(self, dt):return timedelta(hours=self._offset)#北京时间
beijing = datetime(2011,11,11,0,0,0,tzinfo = UTC(8))
print "beijing time:",beijing
#曼谷时间
bangkok = datetime(2011,11,11,0,0,0,tzinfo = UTC(7))
print "bangkok time",bangkok
#北京时间转成曼谷时间
print "beijing-time to bangkok-time:",beijing.astimezone(UTC(7))#计算时间差时也会考虑时区的问题
timespan = beijing - bangkok
print "时差:",timespan#Output==================
# beijing time: 2011-11-11 00:00:00+08:00
# bangkok time 2011-11-11 00:00:00+07:00
# beijing-time to bangkok-time: 2011-11-10 23:00:00+07:00
# 时差: -1 day, 23:00:00

6、一些关于时间的计算

获取两个日期间所有月份

def get_month_range(start_day,end_day):months = (end_day.year - start_day.year)*12 + end_day.month - start_day.monthmonth_range = ['%s-%s'%(start_day.year + mon//12,mon%12+1) for mon in range(start_day.month-1,start_day.month + months)]return month_rangeprint(get_month_range(datetime.date(2016, 1, 31),datetime.date(2017,3,26))) 
# 输出:['2016-1','2016-2','2016-3','2016-4','2016-5','2016-6','2016-7','2016-8','2016-9','2016-10','2016-11','2016-12','2017-1','2017-2','2017-3']

计算两个日期相差多少个月

import datetime
from dateutil import rruled1 = datetime.date(2016, 2, 29)
d2 = datetime.date(2019, 3, 31)
months = rrule.rrule(rrule.MONTHLY, dtstart=d1, until=d2).count()
print(f"months={months}")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/454625.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python自学网站需要多长时间-怎么自学python,大概要多久?

我泼点冷水&#xff1a;建议还是要慎重选择上来新手就自学Python。如果想认认真真打好基础&#xff0c;还是要至少从Java学起。换句话说&#xff0c;先学会Java&#xff0c;然后再学Python不迟。 Python的最大优势是简单明快&#xff0c;最大问题也是简单明快。 我面试过很多用…

[c/c++] programming之路(25)、字符串(六)——memset,Unicode及宽字符,strset

一、memset #include<stdio.h> #include<stdlib.h> #include<memory.h>void *mymemset(void *p, int num, int len) {char *px (char *)p;if (p NULL)return NULL;while (len>0){*px (char)num;px;len--;}return p;//因为上述代码是对px进行操作&#…

linux切换sid,linux – 将sid字段添加到ps -f输出

我正在阅读ps手册页,有一些我不明白的东西.-f does full-format listing. This option can be combined with many otherUNIX-style options to add additional columns. It also causes thecommand arguments to be printed. When used with -L, the NLWP (number ofthreads) …

使用Cross-Page Postback(跨页面提交)在页面间传递数据

页面间传递数据的几种方法 在页面间传递数据时&#xff0c;我们有以下几种选择&#xff1a; 1、Query String 一个很常见的方法&#xff0c;Query String是URL中问号之后的那一部分。其优点在于它是轻量级的&#xff0c;不会给服务器带来任何负担。而它也有几个缺点&#xff1a…

synchronized 和 lock 的区别

lock更灵活&#xff0c;可以自由定义多把锁的加锁解锁顺序&#xff08;synchronized要按照先加的后解顺序&#xff09; 提供多种加锁方案&#xff0c;lock 阻塞式, trylock 无阻塞式, lockInterruptily 可打断式&#xff0c; 还有trylock的带超时时间版本。 本质上和监视器锁&a…

win10怎么设置默认输入法_win10系统输入法失效打不了字怎么办

大家好&#xff0c;今天分享一篇来自小白系统官网(xiaobaixitong.com)的图文教程。最近有用户反映自己电脑上的win10系统出现输入法失效打不了字的问题&#xff0c;想知道有没有解决该问题的方法。小编经过一番查找后给大家整理出了针对该问题的解决方法&#xff0c;下面就让我…

Python 内置模块之 时间模块 time

time模块提供各种时间相关的功能,与时间相关的模块有&#xff1a;time,datetime,calendar 必要说明&#xff1a; 这个模块的功能不是适用于所有的平台 这个模块中定义的大部分函数是调用C平台上的同名函数实现 一些术语和约定的解释&#xff1a; 时间戳(timestamp)的方式,返…

linux找link原路径,readlink命令找出符号链接所指向的位置

1.释义找出符号链接所指向的位置2.系统帮助用法&#xff1a;readlink [选项]... 文件...输出符号链接值或权威文件名。-f, --canonicalize递归跟随给出文件名的所有符号链接以标准化&#xff0c;除最后一个外所有组件必须存在-e, --canonicalize-existing递归跟随给出文件名的所…

国产毫米波雷达领域的领头羊,木牛科技将在明年量产77GHz汽车雷达

国内的汽车毫米波雷达市场风潮起于2015年前后&#xff0c;彼时国内的毫米波雷达企业已经发展很多年&#xff0c;但大都在军工领域。 面对突然出现的汽车毫米波雷达市场热潮&#xff0c;国内很快涌现出了一大批雷达的初创企业&#xff0c;努力挤进这一亦新亦旧的市场。 说是新&a…

面试风云录(02) - 与顶级CTO交手的难忘经验...

大部分面试都是寻找团队伙伴或成员&#xff0c;很少是面试高层&#xff0c;因为职级比我们高的人&#xff0c;自然会有更高层的人面试他们&#xff0c;但这次分享的不是一般面试&#xff0c;而是我跟顶级CTO交手的经验&#xff0c;尽管为了顾虑当事人隐私&#xff0c;我已经隐去…

MySQL 之 performance_schema

背景&#xff1a; 自 MySQL5.5开始&#xff0c;MySQL新增了一个数据库&#xff1a;PERFORMANCE_SCHEMA&#xff0c;主要用于收集数据库服务器性能参数。此库中表的存储引擎均为PERFORMANCE_SCHEMA&#xff08;用户不能创建存储引擎为PERFORMANCE_SCHEMA的表&#xff09;。MySQ…

DNS解析原理与Bind部署DNS服务

DNS是什么&#xff1f; DNS&#xff08;Domain Name System&#xff0c;域名系统&#xff09;是互联网上最核心的带层级的分布式系统&#xff0c;它负责把域名转换为IP地址、反查IP到域名的反向解析以及宣告邮件路由等信息&#xff0c;使得基于域名提供服务称为可能&#xff0c…

qt 获取本机的wifi密码_还在记密码?这款开源免费的账号密码管理神器赶紧收了...

工作中涉及到得账号密码&#xff0c;你是怎么记录得&#xff1f;如果是文档word或者excel记录&#xff0c;那么回非常麻烦&#xff0c;每次还得打开。如果是浏览器自己记录&#xff0c;如果更新密码&#xff0c;又记不得。尴尬&#xff01;今天大卫给大家推荐一款开源免费得账号…

adaptec raid linux,adaptecraid卡管理软件在windows和linux下的安装使用介绍(7页)-原创力文档...

adaptec raid卡管理软件在 windows和linux下的安装使用文档l.adaptec raid卡的管理软件在 windows下安装后的运行界面如下图:adaplecadaplec点击connect后&#xff0c;便可进入管理软件的主界面&#xff0c;如下图:在这个主界面中可以选择要操作的 raid卡&#xff0c;例如本例中…

think queue 消息队列初体验

使用的是tp5 自带的消息队列 thinkphp top里的 消息队列框架 think-queue 这是thinkphp官方团队开发的一个专门支持队列服务的扩展包 消息队列应用场景&#xff1a; 消息队列适用于大并发或者返回结果 时间有点长并需要批量操作的第三方接口。 当前使用快递单号获取&#xf…

Linux快速计算MD5和Sha1命令

Linux计算MD5和Sha1的命令 MD5 MD5即Message-Digest Algorithm 5&#xff08;信息-摘要算法 5&#xff09;&#xff0c;用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一&#xff08;又译摘要算法、哈希算法&#xff09;&#xff0c;主流编程语言普遍已有MD5实现。 S…

win10无法运行C语言文件,主编告诉你win10打不开pdf文件的详尽处理办法

win10打不开pdf文件的问题大家有没有发现呢&#xff1f;今天有一个网友就来向小编询问处理办法。其实不知都还有多少用户遇到了win10打不开pdf文件的问题&#xff0c;我们可以尝试着自己来处理win10打不开pdf文件的问题&#xff0c;我们其实只需要这样操作&#xff1a;1、2、就…

MySQL 自带的四个数据库 介绍

背景 通过终端登录mysql数据库&#xff08;或直接用客户端工具&#xff09;查看全部数据库,如下&#xff1a; 5.7及以上自带库为&#xff1a;information_schema、mysql、performance_schema、sys&#xff1b; 5.6自带的库为&#xff1a;information_schema、mysql、performa…

简单绘图软件实现mfc大作业_纸笔书写|可直播可微课可写作业可批改的手写板,快来爱“我”吧...

线上教学进入下半场&#xff0c;我们需要什么&#xff1f;走过线上教育的探索期&#xff0c;相信不少老师已经对线上教学驾轻就熟了&#xff0c;但对于线上教学来说&#xff0c;合适的教学支持工具始终是必不可少的。不论是文科教师&#xff0c;还是理科教师&#xff0c;对于真…

一道多线程通信实例分析

程序如下&#xff1a; 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354public static void main(String[] args) throws Exception{ final List list new ArrayList(); final Object lock new Object(); Thread t1 …