Python STL datetime

作用:datetime模块包含一些函数和类,用于完成日期和时间解析、格式化和算术运算。

Python版本:2.3及以后版本

datetime包含一些用于处理日期和时间的函数和类,这些函数和类可以单独使用,也可以结合使用。

模块概览

datetime 主要有三个模块

  • time
  • date
  • datetime

时间

时间值用time类表示。time实例包含hour、minute、second和microsecond属性,还可以包含时区信息。

In [7]: import datetime            

In [8]: t = datetime.time(1, 2, 3) 

In [9]: t
Out[9]: datetime.time(1, 2, 3)     

In [10]: t.hour
Out[10]: 1                         

In [11]: t.minute
Out[11]: 2                         

In [12]: t.second
Out[12]: 3                         

In [13]: t.microsecond
Out[13]: 0                         

In [14]: t.tzinfo

初始化time实例的参数是可选的,不过默认值0往往不会是正确的设置。

time实例只包含时间值,而不包含与时间关联的日期值。min和max类属性可以反映一天中的合法时间范围

In [15]: datetime.time.min
Out[15]: datetime.time(0, 0)              

In [16]: datetime.time.max
Out[16]: datetime.time(23, 59, 59, 999999)

In [17]: datetime.time.resolution
Out[17]: datetime.timedelta(0, 0, 1)      

In [18]: print(datetime.time.resolution)
0:00:00.000001                            

time的分辨率限制为整毫秒值。

处理浮点数值的方式取决于Python的版本。版本2.7会产生一个TypeError,而更早的版本会生成一个DeprecationWaming,并把浮点数转换为一个整数。

import datetime

for m in [ 1, 0, 0.1, 0.6 ]:
    try:
        print '%02.1f :' % m, datetime.time(0, 0, 0, microsecond=m)
    except TypeError, err:
        print 'ERROR:', err

python2.7

python2.6

日期

日历日期值用date类表示。date实例包含year、month和day属性。使用today〇类方法很 容易创建一个表示当前日期的日期实例

In [25]: today = datetime.date.today() 

In [26]: today.ctime()
Out[26]: 'Fri Feb 23 00:00:00 2018'    

In [27]: tt = today.timetuple()        

In [28]: for i in tt:
    ...:     print(i)
    ...:
2018
2
23
0
0
0
4
54
-1                                     

In [29]: type(tt)
Out[29]: time.struct_time

In [30]: today.toordinal()
Out[30]: 736748           

In [31]: today.year
Out[31]: 2018             

In [32]: today.month
Out[32]: 2                

In [33]: today.day
Out[33]: 23               

还有一些类方法可以由POSIX时间戳或表示Gregorian日历中日期值的整数(第1年的1月1日对应的整数为1,以后每天对应的值相应增1)来创建date实例,

import datetime
import time

o = 733114
print 'o               :', o
print 'fromordinal(o)  :', datetime.date.fromordinal(o)

t = time.time()
print 't               :', t
print 'fromtimestamp(t):', datetime.date.fromtimestamp(t)

这个例子表明fromordinal()和fromtimestamp()使用了不同的值类型

o               : 733114
fromordinal(o)  : 2008-03-13
t               : 1519368051.68
fromtimestamp(t): 2018-02-23
[Finished in 0.1s]

与time类似,可以使用min和max属性确定所支持的日期值范围。

import datetime

print 'Earliest  :', datetime.date.min
print 'Latest    :', datetime.date.max
print 'Resolution:', datetime.date.resolution

日期的分辨串为整天。

Earliest  : 0001-01-01
Latest    : 9999-12-31
Resolution: 1 day, 0:00:00
[Finished in 0.1s]

创建新的date实例还有一种方法,可以使用一个现有date的replace方法来创建。

import datetime

d1 = datetime.date(2008, 3, 29)
print 'd1:', d1.ctime()

d2 = d1.replace(year=2009)
print 'd2:', d2.ctime()

这个例子会改变年,但日和月保持不变。

d1: Sat Mar 29 00:00:00 2008
d2: Sun Mar 29 00:00:00 2009
[Finished in 0.1s]

增量

通过对两个datetime对象使用算术运算,或者结合使用一个datetime和一个timedelta,可以计算出将来和过去的一些日期将两个日期相减可以生成一个timedelta,还可以对某个日期增加或减去一个timedelta来生成另一个日期。timedelta的内部值按日、秒和亳秒存储。

import datetime

print "microseconds:", datetime.timedelta(microseconds=1)
print "milliseconds:", datetime.timedelta(milliseconds=1)
print "seconds     :", datetime.timedelta(seconds=1)
print "minutes     :", datetime.timedelta(minutes=1)
print "hours       :", datetime.timedelta(hours=1)
print "days        :", datetime.timedelta(days=1)
print "weeks       :", datetime.timedelta(weeks=1)

传入构造函数的中间值会转换为日、秒和毫秒。

microseconds: 0:00:00.000001
milliseconds: 0:00:00.001000
seconds     : 0:00:01
minutes     : 0:01:00
hours       : 1:00:00
days        : 1 day, 0:00:00
weeks       : 7 days, 0:00:00
[Finished in 0.1s]

一个timedelta的完整时间段可以使用total_seconds()得到,作为一个秒数返回。

import datetime

for delta in [datetime.timedelta(microseconds=1),
              datetime.timedelta(milliseconds=1),
              datetime.timedelta(seconds=1),
              datetime.timedelta(minutes=1),
              datetime.timedelta(hours=1),
              datetime.timedelta(days=1),
              datetime.timedelta(weeks=1),
              ]:
    print '%15s = %s seconds' % (delta, delta.total_seconds())

返回值是一个浮点数,因为有些时间段不到1秒.

 0:00:00.000001 = 1e-06 seconds
 0:00:00.001000 = 0.001 seconds
        0:00:01 = 1.0 seconds
        0:01:00 = 60.0 seconds
        1:00:00 = 3600.0 seconds
 1 day, 0:00:00 = 86400.0 seconds
7 days, 0:00:00 = 604800.0 seconds
[Finished in 0.1s]

运算

日期算术运算使用标准算术操作符来完成。

import datetime

today = datetime.date.today()
print 'Today    :', today

one_day = datetime.timedelta(days=1)
print 'One day  :', one_day

yesterday = today - one_day
print 'Yesterday:', yesterday

tomorrow = today + one_day
print 'Tomorrow :', tomorrow

print
print 'tomorrow - yesterday:', tomorrow - yesterday
print 'yesterday - tomorrow:', yesterday - tomorrow

这个处理日期对象的例子展示了使用timedelta对象来计算新日期,以及将日期实例相减来生成timedelta (包括一个负差异值)。

Today    : 2018-02-23
One day  : 1 day, 0:00:00
Yesterday: 2018-02-22
Tomorrow : 2018-02-24

tomorrow - yesterday: 2 days, 0:00:00
yesterday - tomorrow: -2 days, 0:00:00
[Finished in 0.1s]

比较

日期和时间值都可以使用标准比较操作符来比较,确定哪一个在前或在后。

import datetime

print 'Times:'
t1 = datetime.time(12, 55, 0)
print '  t1:', t1
t2 = datetime.time(13, 5, 0)
print '  t2:', t2
print '  t1 < t2:', t1 < t2

print
print 'Dates:'
d1 = datetime.date.today()
print '  d1:', d1
d2 = datetime.date.today() + datetime.timedelta(days=1)
print '  d2:', d2
print '  d1 > d2:', d1 > d2

所有比较操作符都得到支持

Times:
  t1: 12:55:00
  t2: 13:05:00
  t1 < t2: True

Dates:
  d1: 2018-02-23
  d2: 2018-02-24
  d1 > d2: False
[Finished in 0.1s]

结合

使用datetime类可以存储由日期和时间分量构成的值。类似于date,可以使用很多便利的类方法由其他常用值创建datetime实例。

import datetime

print 'Now    :', datetime.datetime.now()
print 'Today  :', datetime.datetime.today()
print 'UTC Now:', datetime.datetime.utcnow()
print

FIELDS = [ 'year', 'month', 'day',
           'hour', 'minute', 'second', 'microsecond',
           ]

d = datetime.datetime.now()
for attr in FIELDS:
    print '%15s: %s' % (attr, getattr(d, attr))

可以看到,datetime实例包含date和time对象的所有属性。

Now    : 2018-02-23 14:56:09.960000
Today  : 2018-02-23 14:56:09.960000
UTC Now: 2018-02-23 06:56:09.960000

           year: 2018
          month: 2
            day: 23
           hour: 14
         minute: 56
         second: 9
    microsecond: 960000
[Finished in 0.1s]

与date类似,datetime提供了方便的类方法来创建新实例。它还包括fromordinal和fromtimestamp

import datetime

t = datetime.time(1, 2, 3)
print 't :', t

d = datetime.date.today()
print 'd :', d

dt = datetime.datetime.combine(d, t)
print 'dt:', dt

利用combine,可以由一个date实例和一个time实例创建一个datetime实例。

t : 01:02:03
d : 2018-02-23
dt: 2018-02-23 01:02:03
[Finished in 0.1s]

格式化和解析

datetime对象的默认字符串表示使用ISO-8601格式(YYYY-MM-DDTHH:MM:SS.mmmmmm)。可以使用strftime()生成其他格式。

import datetime

format = "%a %b %d %H:%M:%S %Y"

today = datetime.datetime.today()
print 'ISO     :', today

s = today.strftime(format)
print 'strftime:', s

d = datetime.datetime.strptime(s, format)
print 'strptime:', d.strftime(format)

使用datetime.strptime()可以将格式化的字符串转换为datetime实例

ISO     : 2018-02-23 14:59:50.899000
strftime: Fri Feb 23 14:59:50 2018
strptime: Fri Feb 23 14:59:50 2018
[Finished in 0.1s]

时区

在datetime中,时区由tzinfo的子类表示,由于tzinfo是一个抽象基类,实际使用时,应用需要定义它的一个子类,并提供一些方法的适当的表示。遗憾的是,datetime未包含任何可 供使用的具体实现(不过文档提供了一些示例实现)。可以参考标准库文档页面,其中有一些 使用固定偏移的例子,还可以从中了解一个有关DST的类以及创建定制时区类的更多详细信息。pytz也是一个了解时区实现细节的很好的资源。

原文地址:https://www.cnblogs.com/oneTOinf/p/8463312.html

时间: 2024-11-02 14:07:39

Python STL datetime的相关文章

python的datetime模块实用小记

今天简单整理一下python的datetime模块使用中遇到的方法,感觉这个模块相当灵活, 实现相同的需求可以用多种方法解决. 所以我也不多描述和讲解这个模块的具体内容了, 仅作为记录和索引. 参考资料: https://docs.python.org/2/library/datetime.html 主要类: datetime:https://docs.python.org/2/library/datetime.html#datetime-objects timedelta: https://d

mongodb和python的datetime的差异

python中需要使用utc时间 mongo.exe命令 db.sms_ttl.ensureIndex({"createdAt": 1}, {expireAfterSeconds: 600}) pymongo操作 db.sms_ttl.insert({"createdAt": datetime.utcnow(), "type": "sms-auth", "phone":"", "

Pandas Timestamp 和 python 中 datetime 的互相转换

Pandas 的Timestamp 和 python 的 datetime,   这是两种不同的类型. 它们之间可以互相转换. refer to: https://www.jianshu.com/p/96ea42c58abe 原文地址:https://www.cnblogs.com/qingyuanjushi/p/8407421.html

基于Python的datetime模块和time模块源码阅读分析

目录 1 前言  2 datetime.pyi源码分步解析 2.1 头部定义源码分析 2.2 tzinfo类源码分析 2.3 date类源码分析 2.4 time类源码分析 2.5 timedelta类源码分析 2.6 datetime类源码分析 2.7 格式化字符串 3 time模块time.pyi源码解析 1 前言 最近工作需求上对于datetime模块中的方法调用比较多,有时还要返回指定的格式,以及大小比较等情况.发现使用Python自带的datetime模块可以很好地实现相关需求,但是对

Python中datetime模块中strftime/strptime函数

python中datetime模块非常好用,提供了日期格式和字符串格式相互转化的函数strftime/strptime 1.由日期格式转化为字符串格式的函数为: datetime.datetime.strftime() 2.由字符串格式转化为日期格式的函数为: datetime.datetime.strptime() 3.两个函数都涉及日期时间的格式化字符串,列举如下: %a 星期几的简写;如 星期三为Web %A 星期几的全称;如 星期三为Wednesday %b 月份的简写; 如4月份为Ap

Python的datetime模块分析

datetime模块用于是date和time模块的合集,datetime有两个常量,MAXYEAR和MINYEAR,分别是9999和1. datetime模块定义了5个类,分别是 1.datetime.date:表示日期的类 2.datetime.datetime:表示日期时间的类 3.datetime.time:表示时间的类 4.datetime.timedelta:表示时间间隔,即两个时间点的间隔 5.datetime.tzinfo:时区的相关信息 一.首先看一下datetime.date类

python 中datetime 和 string 转换

dt = datetime.datetime.strptime(string_date, fmt) fmt 的格式说明如下: https://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior

python中datetime模块

Python提供了多个内置模块用于操作日期时间,像calendar,time,datetime.time模块我在之前的文章已经有所介绍,它提供 的接口与C标准库time.h基本一致.相比于time模块,datetime模块的接口则更直观.更容易调用.今天就来讲讲datetime模块. datetime模块定义了两个常量:datetime.MINYEAR和datetime.MAXYEAR,分别表示datetime所能表示的最 小.最大年份.其中,MINYEAR = 1,MAXYEAR = 9999

python之datetime处理

python版本3.5 1.datetime包导入方式 datetime包导入有两种方式(新人注意): 第一种:import datetime    # 导入时间日期 >>>获取当前时间:now = datetime.datetime.now()       ------- 2017-09-15 11:29:21.796463 >>>获取今天的日期:today = datetime.date.today()     ---------2017-09-15 >>