Python提供了多个内置模块用于操作日期时间,像calendar,time,datetime。datetime模块用于是date和time模块的合集,他内部重新封装了time模块,相比于time模块,datetime模块的接口则更直观、更容易调用。

  datetime模块定义了两个常量:datetime.MINYEAR和datetime.MAXYEAR,分别表示datetime所能表示的最小、最大年份。

  其中:MINYEAR = 1,MAXYEAR = 9999。(对于偶等玩家这个范围已然足矣~~要不然就是爬行动物了~~~)

datetime模块定义了下面这几个类:

  • datetime.date:表示日期的类。常用的属性有year, month, day;
  • datetime.time:表示时间的类。常用的属性有hour, minute, second, microsecond;
  • datetime.datetime:表示日期时间。
  • datetime.timedelta:表示时间间隔,即两个时间点之间的长度。
  • datetime.tzinfo:与时区有关的相关信息。

    注 :上面这些类型的对象都是不可变(immutable)的。

date类

  date类表示一个日期。日期由年、月、日组成。

  date类有三个参数:datetime.date(year,month,day),返回year-month-day。

参数上有几点要注意一下:

  1. year的范围是[MINYEAR, MAXYEAR],即[1, 9999];
  2. month的范围是[1, 12]。(月份是从1开始的,不是从0开始的~_~);
  3. day的最大值根据给定的year, month参数来决定。例如闰年2月份有29天;

date类定义了一些常用的类方法与类属性【可以理解为:静态方法和字段】方便我们操作:

date.max、date.min:date对象所能表示的最大、最小日期;
date.resolution:date对象表示日期的最小单位。这里是天。
date.today():返回一个表示当前本地日期的date对象;
date.fromtimestamp(timestamp):根据给定的时间戮,返回一个date对象;
datetime.fromordinal(ordinal):将Gregorian日历时间转换为date对象;
(Gregorian Calendar :一种日历表示方法,类似于我国的农历,西方国家使用比较多,此处不详细展开讨论。)

此外,date提供了实例化对象的方法和属性:

date.year、date.month、date.day:年、月、日;
date.replace(year, month, day):生成一个新的日期对象,用参数指定的年,月,日代替原有对象中的属性。(原有对象仍保持不变)
date.timetuple():返回日期对应的time.struct_time对象;
date.toordinal():返回日期对应的Gregorian Calendar日期;
date.weekday():返回给定日期的星期(0-6)weekday,如果是星期一,返回0;如果是星期2,返回1,以此类推;
data.isoweekday():返回weekday,如果是星期一,返回1;如果是星期2,返回2,以此类推;
date.isocalendar():返回格式如(year,month,day)的元组;
date.isoformat():返回格式如'YYYY-MM-DD’的字符串;
date.strftime(format):自定义格式化字符串。把日期时间按照给定的format进行格式化。
date.ctime():返回格式如 Sun Apr 16 00:00:00 2017

代码示例:

from datetime import datetime,date,time,timedelta
import time print("date max",date.max) #最大日期
print("date min",date.min) #最小日期 print("date today",date.today()) #今天
print("date fromtimestamp",date.fromtimestamp(time.time())) #当前时间对象
#------ 执行结果 ---------
# date max 9999-12-31
# date min 0001-01-01
# date today 2017-08-24
# date fromtimestamp 2017-08-24 #创建date对象
d1 = date(2015,8,2)#date对象
tomorrow = d1.replace(day=3)
#年,月,日
print("日期对象:",d1)
print("年:",d1.year) #年
print("月:",d1.month)#月
print("日:",d1.day)#日
print("日期的下一天:",tomorrow)
print("结构化时间:",d1.timetuple())
print("weekday:",d1.weekday())
print("isoweekdays:",d1.isoweekday())
print("元组类型时间:",d1.isocalendar())
print("字符串类型时间:",d1.isoformat())
print("格式化时间:",d1.strftime("%Y-%m-%d")) #---------执行结果-----------
# 日期对象: 2015-08-02
# 年: 2015
# 月: 8
# 日: 2
# 日期的下一天: 2015-08-03
# 结构化时间: time.struct_time(tm_year=2015, tm_mon=8, tm_mday=2, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=6, tm_yday=214, tm_isdst=-1)
# weekday: 6
# isoweekdays: 7
# 元组类型时间: (2015, 31, 7)
# 字符串类型时间: 2015-08-02
# 格式化时间: 2015-08-02

date类所有方法举例

Time类

time类构造函数:datetime.time(hour,minute,second,microsecond,tzoninfo); time类有5个参数,表示时间,由时、分、秒以及微秒组成。各参数的意义不作解释,这里留意一下参数tzinfo,它表示时区信息。注意一下各参数的取值范围:hour的范围为[0, 24),minute的范围为[0, 60),second的范围为[0, 60),microsecond的范围为[0, 1000000)。

time类定义的类属性:

  • time.min、time.max:time类所能表示的最小、最大时间。其中,time.min = time(0, 0, 0, 0), time.max = time(23, 59, 59, 999999);
  • time.resolution:时间的最小单位,这里是1微秒;

time类提供的实例方法和属性:

  • time.hour、time.minute、time.second、time.microsecond:时、分、秒、微秒;
  • time.tzinfo:时区信息;
  • time.replace([ hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ] ):创建一个新的时间对象,用参数指定的时、分、秒、微秒代替原有对象中的属性(原有对象仍保持不变);
  • time.isoformat():返回型如"HH:MM:SS"格式的字符串表示;
  • time.strftime(fmt):返回自定义格式化字符串。
  • time.tzname():返回时区名字
  • time.utcoffset():返回时区的时间偏移量

代码示例:

from datetime import datetime,date,time,timedelta

print("最大时间:",time.max)
print("最小时间:",time.min)
print("最小单位:",time.resolution) #创建一个时间对象
tm = time(22,24,12)
tm1 = tm.replace(hour=20)
print("时间对象:",tm)
print("时:%s,分%s,秒%s,毫秒%s"%(tm.hour,tm.minute,tm.second,tm.microsecond))
print("替换其他时间:",tm1)
print("格式化时间 isoformat:",tm.isoformat())
print("格式化时间 strftime:",tm.strftime("%X"))
print("时区偏移量:",tm.utcoffset())
#----------执行结果------------
# 最大时间: 23:59:59.999999
# 最小时间: 00:00:00
# 最小单位: 0:00:00.000001
# 时间对象: 22:24:12
# 时:22,分24,秒12,毫秒0
# 替换其他时间: 20:24:12
# 格式化时间 isoformat: 22:24:12
# 格式化时间 strftime: 22:24:12
# 时区偏移量: None

datetime类

  datetime是date与time的结合体,包括date与time的所有信息。

  函数:datetime.datetime (year, month, day[ , hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ] ),各参数的含义与date、time的构造函数中的一样,要注意参数值的范围。

datetime类定义的类属性与方法:

  • datetime.min、datetime.max:datetime所能表示的最小值与最大值;
  • datetime.resolution:datetime最小单位;
  • datetime.today():返回一个表示当前本地时间的datetime对象;
  • datetime.now([tz]):返回一个表示当前本地时间的datetime对象,如果提供了参数tz,则获取tz参数所指时区的本地时间;
  • datetime.utcnow():返回一个当前utc时间的datetime对象;
  • datetime.fromtimestamp(timestamp[, tz]):根据时间戮创建一个datetime对象,参数tz指定时区信息;
  • datetime.utcfromtimestamp(timestamp):根据时间戮创建一个datetime对象;
  • datetime.combine(date, time):根据date和time,创建一个datetime对象;
  • datetime.strptime(date_string, format):将格式字符串转换为datetime对象;
  • datetime.strftime(format):由日期格式转化为字符串格式

 datetime类提供的实例方法与属性(很多属性或方法在date和time中已经出现过,意义相同)

  • datetime.year、month、day、hour、minute、second、microsecond、tzinfo:
  • datetime.date():获取date对象;
  • datetime.time():获取time对象;
  • datetime.replace ([ year[ , month[ , day[ , hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ] ] ] ]):
  • datetime.timetuple ()
  • datetime.utctimetuple ()
  • datetime.toordinal ()
  • datetime.weekday ()
  • datetime.isocalendar ()
  • datetime.isoformat ([ sep] )
  • datetime.ctime ():返回一个日期时间的C格式字符串,等效于time.ctime(time.mktime(dt.timetuple()));

代码示例:

from datetime import datetime,date,time,timedelta
import time print("最大时间:",datetime.max)
print("最小时间:",datetime.min)
print("最小单位:",datetime.resolution) print("今天:",datetime.today())
print("当前时间:",datetime.now())
print("当前时区时间:",datetime.utcnow())
#根据时间戳创建datetime对象
print('fromtimestamp(tmstmp):' , datetime.fromtimestamp(time.time()))
print('utcfromtimestamp(tmstmp):' , datetime.utcfromtimestamp(time.time()) ) #日期格式与字符串格式转换
a = datetime.now().strftime('%b-%d-%Y %H:%M:%S')
print("字符串时间:",a)
b = datetime.strptime(a,'%b-%d-%Y %H:%M:%S')
print("日期时间:",b)
#-----------------执行结果------------------
# 最大时间: 9999-12-31 23:59:59.999999
# 最小时间: 0001-01-01 00:00:00
# 最小单位: 0:00:00.000001
# 今天: 2017-08-24 17:43:15.209433
# 当前时间: 2017-08-24 17:43:15.209432
# 当前时区时间: 2017-08-24 09:43:15.209432
# fromtimestamp(tmstmp): 2017-08-24 17:43:15.209433
# utcfromtimestamp(tmstmp): 2017-08-24 09:43:15.209433
# 字符串时间: Aug-24-2017 17:43:15
# 日期时间: 2017-08-24 17:43:15

datetime类代码示例

timedelta类,时间加减

   datetime还对某些操作进行了重载:timedelta就是一个重载的例子。datetime.timedelta用于计算两个日期之间的差值。它允许我们可以很方便的在日期上做天days,小时hour,分钟,秒,毫秒,微妙的时间计算,如果要计算月份则需要另外的办法。

  date2 = date1 + timedelta # 日期加上一个间隔,返回一个新的日期对象(timedelta将在下面介绍,表示时间间隔)
  date2 = date1 - timedelta # 日期隔去间隔,返回一个新的日期对象
  timedelta = date1 - date2 # 两个日期相减,返回一个时间间隔对象
  date1 < date2 # 两个日期进行比较,返回布尔值
  注: 对日期进行操作时,要防止日期超出它所能表示的范围。

代码示例:

In [5]: import datetime
In [6]: a = datetime.datetime.now()
In [7]: b = datetime.datetime.now() #查看时间间隔
In [8]: a-b
Out[8]: datetime.timedelta(-1, 86393, 697639) In [9]: b-a
Out[9]: datetime.timedelta(0, 6, 302361)
#查看相差时间
In [11]: (b-a).seconds
Out[11]: 6
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
from datetime import datetime,date,time,timedelta # dt = datetime.now() #当前时间
# #日期减一天
# dt1 = dt + timedelta(days=-1) #昨天
# dt2 = dt - timedelta(days=1)#昨天
# dt3 = dt + timedelta(days=1)#明天
# delta_obj = dt3-dt #间隔
# flog = dt3 > dt #比较
# print("当前时间:",dt)
# print("昨天时间:",dt1,dt2,)
# print("明天时间:",dt3)
# print("时间间隔:",delta_obj)
# print("时间比较:",flog)
# 执行结果
# 当前时间: 2017-08-24 16:43:25.927137
# 昨天时间: 2017-08-23 16:43:25.927137 2017-08-23 16:43:25.927137
# 明天时间: 2017-08-25 16:43:25.927137
# 时间间隔: 1 day, 0:00:00
# 时间比较: True #或者指定时间
time1 = datetime(2017, 7, 20)
time2 = datetime(2017, 7, 2) time_interval = time1-time2 """计算天数差值"""
print("相差天数:",time_interval.days) """计算两个日期之间相隔的秒数"""
print ("相差秒数:",time_interval.total_seconds()) # 执行结果
# 相差天数: 18
# 相差秒数: 1555200.0

代码示例

tzinfo时区类

#! /usr/bin/python
# coding=utf-8 from datetime import datetime, tzinfo,timedelta """
tzinfo是关于时区信息的类
tzinfo是一个抽象类,所以不能直接被实例化
"""
class UTC(tzinfo):
"""UTC"""
def __init__(self,offset = 0):
self._offset = offset def utcoffset(self, dt):
return timedelta(hours=self._offset) def tzname(self, dt):
return "UTC +%s" % self._offset def 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

格式化时间字符串

datetime、date、time都提供了strftime()方法,该方法接收一个格式字符串,输出日期时间的字符串表示。下表是从python手册中拉过来的,我对些进行了简单的翻译。

格式字符  意义

%a 星期的简写。如 星期三为Web
%A 星期的全写。如 星期三为Wednesday
%b 月份的简写。如4月份为Apr
%B   月份的全写。如4月份为April 
%c:  日期时间的字符串表示。(如: 04/07/10 10:43:39)
%d:  日在这个月中的天数(是这个月的第几天)
%f:  微秒(范围[0,999999])
%H:  小时(24小时制,[0, 23])
%I:  小时(12小时制,[0, 11])
%j:  日在年中的天数 [001,366](是当年的第几天)
%m:  月份([01,12])
%M:  分钟([00,59])
%p:  AM或者PM
%S:  秒(范围为[00,61],为什么不是[00, 59],参考python手册~_~)
%U:  周在当年的周数当年的第几周),星期天作为周的第一天
%w:  今天在这周的天数,范围为[0, 6],6表示星期天
%W:  周在当年的周数(是当年的第几周),星期一作为周的第一天
%x:  日期字符串(如:04/07/10)
%X:  时间字符串(如:10:43:39)
%y:  2个数字表示的年份
%Y:  4个数字表示的年份
%z:  与utc时间的间隔 (如果是本地时间,返回空字符串)
%Z:  时区名称(如果是本地时间,返回空字符串)
%%:  %% => %

from datetime import datetime,date,time,timedelta
dt = datetime.now()
print('(%Y-%m-%d %H:%M:%S %f): ', dt.strftime('%Y-%m-%d %H:%M:%S %f'))
print('(%Y-%m-%d %H:%M:%S %p): ', dt.strftime('%y-%m-%d %I:%M:%S %p'))
print('%%a: %s ' % dt.strftime('%a'))
print('%%A: %s ' % dt.strftime('%A'))
print('%%b: %s ' % dt.strftime('%b'))
print('%%B: %s ' % dt.strftime('%B'))
print('日期时间%%c: %s ' % dt.strftime('%c'))
print('日期%%x:%s ' % dt.strftime('%x'))
print('时间%%X:%s ' % dt.strftime('%X'))
print('今天是这周的第%s天 ' % dt.strftime('%w'))
print('今天是今年的第%s天 ' % dt.strftime('%j'))
print('今周是今年的第%s周 ' % dt.strftime('%U')) # # ---- 结果 ----
# (%Y-%m-%d %H:%M:%S %f): 2017-08-24 19:08:46 397175
# (%Y-%m-%d %H:%M:%S %p): 17-08-24 07:08:46 PM
# %a: Thu
# %A: Thursday
# %b: Aug
# %B: August
# 日期时间%c: Thu Aug 24 19:08:46 2017
# 日期%x:08/24/17
# 时间%X:19:08:46
# 今天是这周的第4天
# 今天是今年的第236天
# 今周是今年的第34周

友情链接:python datetime模块基本操作

Py修行路 内置模块补充 datetime模块的更多相关文章

  1. [py]python的time和datetime模块获取星期几

    import time import datetime #今天星期几 today=int(time.strftime("%w")) print today #某个日期星期几 any ...

  2. Python 入门之 内置模块 -- datetime模块

    Python 入门之 内置模块 -- datetime模块 1.datetime模块 from datetime import datetime (1)datetime.now() 获取当前时间和日期 ...

  3. Python全栈之路----常用模块----datetime模块详解

    相比于time模块,datetime模块的接口则更直观,更容易调用. datetime模块定义了下面这几个类: datetime.date:表示日期的类,常用的属性有year,month,day: d ...

  4. Python3学习之路~5.2 time & datetime模块

    time模块 时间相关的操作,时间有三种表示方式: 时间戳               1970年1月1日之后的秒,即:time.time() 格式化的字符串    2014-11-11 11:11, ...

  5. Python之路(第十六篇)xml模块、datetime模块

    一.xml模块 xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单, xml比较早,早期许多软件都是用xml,至今很多传统公司如金融行业的很多系统的接口还主要 ...

  6. Python之路-python(常用模块学习)

    模块介绍 time &datetime模块 random os sys shutil shelve xml处理 yaml处理 configparser hashlib re正则表达式 1.模块 ...

  7. Python爬虫与数据分析之模块:内置模块、开源模块、自定义模块

    专栏目录: Python爬虫与数据分析之python教学视频.python源码分享,python Python爬虫与数据分析之基础教程:Python的语法.字典.元组.列表 Python爬虫与数据分析 ...

  8. 模块讲解---time模块,datetime模块,random模块,hashlib模块和hmac模块,typing模块,requests模块,re模块

    目录 1. 包 2. time模块   1. 优先掌握 2. 了解 3. datetime模块   1. 优先掌握 4. random模块   1. 优先掌握   2. 了解 5. hashlib模块 ...

  9. Python模块01/自定义模块/time模块/datetime模块/random模块

    Python模块01/自定义模块/time模块/datetime模块/random模块 内容大纲 1.自定义模块 2.time模块 3.datetime模块 4.random模块 1.自定义模块 1. ...

随机推荐

  1. Android DDMS ADB启动失败错误解决!

    ADB server didn't ACK && make sure the plugin is properly configured! adb启动失败一般是端口被占用! 解决方法和 ...

  2. 随机森林和adaboost算法(待更新)

    Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器).

  3. ultraedit使用记录

    ultraedit使用记录 10:57:33 在日常的工作中,我经常用keil进行程序的编写等工作,不过在编写过程中Keil对中文的支持不是很好,容易发生问题:同事推荐我用ultraedit进行程序的 ...

  4. 【C#】Socket中的ssl通信

    引言    有个项目中用到了Socket ssl通信,在此记录一下. 证书 Socket ssl需要用到证书用来校验身份,而作为调试,我们只需用测试证书即可. 有个工具可以很方便地制作测试证书,下载地 ...

  5. Elasticsearch Painless语言(实现搜索打分基础)

    With the release of Elasticsearch 5.x came Painless, Elasticsearch's answer to safe, secure, and per ...

  6. 关于Object类的equals方法和hashCode方法

    关于Object类的equals的特点,对于非空引用: 1.自反性:x.equals(x) return true : 2.对称性:x.equals(y)为true,那么y.equals(x)也为tr ...

  7. commond prompt CD

    如果要进入目前所在盘符的其他路径用cd命令可进入,但如果从c盘进入d盘等,是不用cd命令的. 如目前在c盘的任意目录,需要切换到d盘的根目录,用:“d:”命令(不含引号),如图: cd命令简介: 第一 ...

  8. lzugis——Arcgis Server for JavaScript API之自定义InfoWindow(续)

    同样的标题后面加了一个括弧,不是为了增减博文数量,而确实是上个功能的完善,标注为续,意思是继续上次的内容,来说说如何自定义InfoWindow. 在上一讲中,实现了InfoWindow的显示,但是并没 ...

  9. rebar安装及创建项目

    rebar作为erlang开发中编译,构建,发布,打包,动态升级的常用工具,下面我记录下rebar工具的安装及使用 从源码安装rebar 1. 建立文件 install_rebar.sh 2. 拷贝如 ...

  10. 深入理解java虚拟机-第四章

    第4章 虚拟机性能监按与故障处理工具 jps 虚拟机进程状况工具 jstat 虚拟机统计信息监视工具 JVM Statistics Monitoring Tool jstat [ option vmi ...