Python的datetime模块和time模块

Python中有两个有关时间的模块比较常用,一个是datetime,一个是time。

首先要明白,模块,类,对象,这三个概念。目前我还没想清楚。

1. datetime module

datetime模块,一看就知道是关于时间的,用于对日期,时间,时间戳进行处理。

1.1 datetime class

然后datetime class下面还有一些方法,类和这些方法都可以用 . 来调用。

datetime.datetime.today()
(注意,第一个datetime是模块名,第二个datetime是类名,第三个today()是方法。)
这个方法可以返回当前时区的时间:

import datetime
datetime.datetime.today()
datetime.datetime(2018, 8, 16, 20, 53, 40, 69222)

返回的是一个datetime的对象(不知道可不可以这么说),总之返回的值是代表时间的,格式如上,年,月,日,时,分,秒,微秒。

datetime.datetime.now( tz=None )
可以返回当前的时间,tz的意思是time zone ,时区。如果没有指定tz的话,和datetime.datetime.today() 是一样的。

datetime.datetime.utcnow()
会返回没有时区的当前时间。

中国属于东八时区,所以没有时区的时间,就是中国当前的时间,减去八个小时。

import datetime
print(datetime.datetime.today())
print(datetime.datetime.utcnow())   

2018-08-16 21:01:11.621038
2018-08-16 13:01:11.621537
#注意时间差,还要注意直接output和print的格式的不同

datetime.datetime.fromtimestamp(timestamp,tz=None)
从一个时间戳,生成一个datetime对象。时间戳在后面会说明,这个方法在后面结合datetime.timestamp()演示。

可以指定时区,如果不指定的话,就是当前所在的时区。

以上的方法,都是datetime模块下datetime类的方法,所以前面必须打上模块名和类名,然后用 . 来调用,这个很重要。

1.2 datetime 对象

datetime.timestamp()
这是datetime对象的方法,啥叫对象不好描述,就比如,用.now()生成了一个时间,这个就叫datetime对象。.timestamp()是datetime对象下的方法。

它能把这个datetime对象变成一个时间戳。

时间戳,就是格林威治时间1970年1月1日0点到当前时间的秒数,这个秒数不会随时区变化而变化,因为时间的差值是一定的。

import datetime

t = datetime.datetime.today()
t1 = t.timestamp()

print(t)
print(t1)
2018-08-16 21:15:27.729989 #这是我当前时间
1534425327.729989 #这就是时间戳,单位是秒

t2 = datetime.datetime.fromtimestamp(t1)
print(t2)
2018-08-16 21:15:27.729989 
#从时间戳生成datetime对象,不指定tz的话,返回的是当前时区的时间

构造一个datetime对象

用datetime.datetime() 来构造,直接在括号内指定时间,用 , 来间隔。

依次是:年,月,日,时,分,秒,微秒(微秒一般是六位)

t = datetime.datetime(2008,8,8,8,8,8,888888)

print(t)
2008-08-08 08:08:08.888888

t
datetime.datetime(2008, 8, 8, 8, 8, 8, 888888)

t.timestamp()
1218154088.888888
#构造的这个datetime对象,当然可以调用datetime的方法

datetime.weekday() 和 datetime.isoweekday()
.weekday() 是返回这个datetime对象是星期几,周一是0,周日是6。
.isoweekday() 也是返回这个datetime对象的星期数,周一是1,周日是7。

t = datetime.datetime(2008,8,8,8,8,8,888888)

t.weekday()
4

t.isoweekday()
5

datetime.date() 和 datetime.time()
.date() 是返回这个datetime对象的日期部分。
.time() 是返回这个datetime对象的时间部分。

t = datetime.datetime(2008,8,8,8,8,8,888888)

t.date()
datetime.date(2008, 8, 8)

t.time()
datetime.time(8, 8, 8, 888888)

datetime.isocalendar()
返回一个三元组,(年数,这年里的第几周,这一天是星期几)。

t = datetime.datetime(2008,8,8,8,8,8,888888)

t.isocalendar()
(2008, 32, 5)

datetime.replace()
可以更改这个datetime对象,直接在括号里指定就是,格式和构造一个datetime对象一样。

t = datetime.datetime(2008,8,8,8,8,8,888888)

t.replace(2018,8,16)
datetime.datetime(2018, 8, 16, 8, 8, 8, 888888)

datetime.year和datetime.month和datetime.day
前面的datetime是datetime对象,后面接.year等,可以直接调用想要的数据。

t.year, t.month, t.day
(2008, 8, 8)
#注意封装了封装了,复习一下前面内容

1.3 日期的格式化

可以从一个表示datetime的字符串,生成一个datetime对象;或者是把一个datetime对象,按照想要的格式输出。

datetime.datetime.strptime(datetime_str, format)
这个是datetime类的方法,所以前面要写模块名和类名。

四位的年是Y,两位的年(后两位)是y,月是m,日是d
时是H,分是M,秒是S,微秒是f。

import datetime
d1 = datetime.datetime.utcnow()
datetime.datetime(2018, 8, 17, 1, 1, 40, 689699)

#我们取括号内的内容,生成字符串,注意下面括号里是字符串,不是datetime对象   
datetime.datetime.strptime('2018, 8, 17, 1, 1, 40','%Y, %m, %d, %H, %M, %S')

#也可以自己写
datetime.datetime.strptime('2012-12-22','%Y-%m-%d')
datetime.datetime(2012, 12, 22, 0, 0)
#要注意的是,前后格式一定要相同,datetime真的很严格
#注意月是小写m,分是大写M
#没指定的话,就是0呗

datetime.strftime(format)
这是datetime对象的方法。

把datetime对象的某些部分提取出来,按指定的格式,转换成一个字符串。

d2 = datetime.datetime(2012, 12, 22, 0, 0)

d2.strftime('years%y/days%d/months%m')
'years12/days22/months12'

#还可以总字符串格式化
print('{0:%f}//{0:%y}--{0:%d}'.format(d2))
000000//12--22
#注意大括号里的0,是后面d2的索引号。
#前面的六个0,是微秒,12是年份的后两位,22是日。

1.4 timedelta

delta是指变量,差值。timedelta指的是时间的增量。

timedelta是datetime模块下的一个类。

datetime2 - datetime1 = timedelta

timedelta的构造方法
datetime.timedelta(days=0,seconds=0,microseconds=0,milliseconds=0,minutes=0, hours=0,weeks=0)

month = datetime.timedelta(days = 30)
month
datetime.timedelta(30)
#返回一个timedelta对象,可以用于时间的计算

timedelta.total_seconds()
返回这个时间差的总秒数,可以计时用。

month.total_seconds()
2592000.0

timedelta的运算
可以把datetime对象和timedelta对象相加或相减。也是返回一个datetime对象。

import datetime
datenow = datetime.datetime.now()

datenow
datetime.datetime(2018, 8, 17, 10, 13, 47, 770661)

datenow + month
datetime.datetime(2018, 9, 16, 10, 13, 47, 770661)

2. time module

time模块下有一个方法比较常用。

time.sleep(seconds)
第一个time是模块名,第二个sleep是方法(不应该是类吗?)。

把这个方法插入代码中,可以让当前进程暂停(就是挂起)指定的秒数,然后继续进行。

猜你喜欢

转载自blog.csdn.net/LittleHuang950620/article/details/81749027