Python中有两个有关时间的模块比较常用,一个是datetime,一个是time。
首先要明白,模块,类,对象,这三个概念。目前我还没想清楚。
datetime模块,一看就知道是关于时间的,用于对日期,时间,时间戳进行处理。
然后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类的方法,所以前面必须打上模块名和类名,然后用 . 来调用,这个很重要。
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)
#注意封装了封装了,复习一下前面内容
可以从一个表示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是日。
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)
time模块下有一个方法比较常用。
time.sleep(seconds)
第一个time是模块名,第二个sleep是方法(不应该是类吗?)。
把这个方法插入代码中,可以让当前进程暂停(就是挂起)指定的秒数,然后继续进行。