python中时间模块_Python中的时间日期模块(time、datetime)

目录

Python提供了datetime、time和 calendar 模块用来处理日期和时间,时间间隔是以秒为单位的浮点数。每个时间戳都是自1970年1月1日来算。

Datetime

datetime在python中是用来处理时间的一个模块

datetime模块下又包含了几个类

类名

功能

date

日期对象,常用的属性有year, month, day

time

时间对象

datetime

日期时间对象,常用的属性有hour, minute, second, microsecond

timedelta

时间间隔,即两个时间点之间的长度

datetime_CAPI

日期时间对象C语言接口

tzinfo

时区信息对象

下面介绍datetime中比较常用的一些函数

获取当前时间

from datetime import datetime

>>> print ( datetime.now() )

2018-10-08 08:08:13.296957

>>> print ( datetime.now().time() )

08:08:13.296957

>>> print ( type(datetime.now()) )

获取当前日期

from datetime import datetime

>>> print ( datetime.now().date() )

2018-10-08

>>> print ( type(datetime.now().date() ) )

获取当前时间的tuple元组

from datetime import datetime

print(datetime.now().timetuple())

//time.struct_time(tm_year=2018, tm_mon=11, tm_mday=1, tm_hour=16, tm_min=21, tm_sec=5, tm_wday=3, tm_yday=305, tm_isdst=-1)

print(datetime.now().timetuple().tm_year) //2018 年

print(datetime.now().timetuple().tm_mon) //11 月

print(datetime.now().timetuple().tm_mday) //1 日

print(datetime.now().timetuple().tm_hour) //16 时

print(datetime.now().timetuple().tm_min) //21 分

print(datetime.now().timetuple().tm_sec) //5 秒

print(datetime.now().timetuple().tm_wday) //3 0-6 0是周一,6是周日

print(datetime.now().timetuple().tm_yday) //305 一年中的第几天

print(datetime.now().timetuple().tm_isdst) //-1 是否为下令时 1为是 0为不是 -1为未知,默认为-1

格式化日期和时间

from datetime import datetime

print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))

#############

2018-11-01 19:25:45

时间移动

使用datetime.timedelta这个方法来前后移动时间,可以用的参数有weeks,days,hours,minutes,seconds,microseconds。使用 days=1代表后一天,days=-1代表前一天,其他参数也一样

from datetime import datetime

from datetime import timedelta

>>>print( datetime.now() )

2018-10-08 08:25:49.546137

>>>print( datetime.now()+ timedelta(days=1))

2018-10-09 08:25:49.547196

获取两个时间的时间差

from datetime import datetime

>>>nowtime=datetime.now()

>>>utctime=datetime.utcnow()

>>>print( nowtime-utctime )

8:00:00

>>>print((nowtime-utctime).total_seconds()) ##以秒计算

28800.0

时间格式转换

datetime转str格式

from datetime import datetime

>>>print( datetime.now() )

2018-10-08 08:33:37.369422

>>>print( datetime.now().strftime("%Y-%m-%d %H:%M:%S") )

2018-10-08 08:33:37

>>>print( datetime.now().strftime("%Y-%m-%d") )

2018-10-08

>>>print( datetime.now().strftime("%H-%M:%S") )

08:33:37

str格式转datetime

from datetime import datetime

>>>print( datetime.strptime("2018-10-08 09:00:00","%Y-%m-%d %H:%M:%S"))

2018-10-08 09:00:00

>>>print( type(datetime.strptime("2018-10-08 09:00:00","%Y-%m-%d %H:%M:%S")) )

datetime转timestamp

from datetime import datetime

import time

>>>now=datetime.now()

>>>print(now)

2018-10-08 08:51:42.215168

>>>print( time.mktime(now.timetuple()) )

1538959902.0 ##现在距离1970-01-01 00:00:00的秒数

timestamp转datetime

from datetime import datetime

>>>print( datetime.fromtimestamp(1538959902.0))

2018-10-08 08:51:42

将2020 Feb 14转换为2020-02-14格式

from datetime import datetime

c_time="2020 Feb 14"

ctime = datetime.strptime(c_time,"%Y %b %d")

ctime = str(ctime).split(" ")[0]

print(ctime)

7fd74681f468a4736c9cd4d4a1d9cfdf.png

Time

获取距元年(1970.1.1)的秒数

>>import time

>>print(time.time())

1541121353.1594238

>>print(time.ctime(time.time()))

Fri Nov 2 09:15:53 2018

当时时间

import time

localtime=time.localtime() #返回结构时间

asctime=time.asctime(localtime) #将结构时间转换为asctime

print(localtime)

print(asctime)

############

time.struct_time(tm_year=2018, tm_mon=11, tm_mday=1, tm_hour=19, tm_min=13, tm_sec=5, tm_wday=3, tm_yday=305, tm_isdst=0)

Thu Nov 1 19:13:05 2018

格式化时间和日期

import time

formattime1=time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())

formattime2=time.strftime("%a-%b-%d %H:%M:%S:%Y",time.localtime())

print(formattime1)

print(formattime2)

#############################

2018-11-01 19:16:30

Thu-Nov-01 19:16:30:2018

b85b27fcd1aaed3b75bf35bcdb58325d.png

休眠

import time

time.sleep(10) ##休眠10秒

Calendar

Calendar模块有很广泛的方法用来处理年历和月历

打印某一年和某一个月的月历

import calendar

print("2018年的年历是:")

print(calendar.prcal(2018))

###################################

2018年的年历是:

2018

January February March

Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su

1 2 3 4 5 6 7 1 2 3 4 1 2 3 4

8 9 10 11 12 13 14 5 6 7 8 9 10 11 5 6 7 8 9 10 11

15 16 17 18 19 20 21 12 13 14 15 16 17 18 12 13 14 15 16 17 18

22 23 24 25 26 27 28 19 20 21 22 23 24 25 19 20 21 22 23 24 25

29 30 31 26 27 28 26 27 28 29 30 31

April May June

Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su

1 1 2 3 4 5 6 1 2 3

2 3 4 5 6 7 8 7 8 9 10 11 12 13 4 5 6 7 8 9 10

9 10 11 12 13 14 15 14 15 16 17 18 19 20 11 12 13 14 15 16 17

16 17 18 19 20 21 22 21 22 23 24 25 26 27 18 19 20 21 22 23 24

23 24 25 26 27 28 29 28 29 30 31 25 26 27 28 29 30

30

July August September

Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su

1 1 2 3 4 5 1 2

2 3 4 5 6 7 8 6 7 8 9 10 11 12 3 4 5 6 7 8 9

9 10 11 12 13 14 15 13 14 15 16 17 18 19 10 11 12 13 14 15 16

16 17 18 19 20 21 22 20 21 22 23 24 25 26 17 18 19 20 21 22 23

23 24 25 26 27 28 29 27 28 29 30 31 24 25 26 27 28 29 30

30 31

October November December

Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su

1 2 3 4 5 6 7 1 2 3 4 1 2

8 9 10 11 12 13 14 5 6 7 8 9 10 11 3 4 5 6 7 8 9

15 16 17 18 19 20 21 12 13 14 15 16 17 18 10 11 12 13 14 15 16

22 23 24 25 26 27 28 19 20 21 22 23 24 25 17 18 19 20 21 22 23

29 30 31 26 27 28 29 30 24 25 26 27 28 29 30

31

cal=calendar.month(2018,10)

print("2018年10月的月历是:")

print(cal)

#########################

2018年10月的月历是:

October 2018

Mo Tu We Th Fr Sa Su

1 2 3 4 5 6 7

8 9 10 11 12 13 14

15 16 17 18 19 20 21

22 23 24 25 26 27 28

29 30 31

print(calendar.leapdays(2000,2018)) #返回2000~2018内的闰年数

print(calendar.weekday(2018,11,2)) ##返回2018.11.2是星期几,0-6

时间戳

python3实现时间戳

import time

timestamp=round(time.time()*1000)

print(timestamp)

4a2a22742754bcc664936c6c287d1cea.png

python2实现时间戳

import time

timestamp = long(round(time.time()*1000))

print timestamp

7be735ebc93cecdeb045704ddc6b7040.png

时间戳+秘钥生成sign验证

以下 时间戳+秘钥生成sign验证,广泛用于网站等进行验证。

第一步:把 timestamp+"\n"+密钥 当做签名字符串 string_to_sign

第二步:使用HmacSHA256算法计算签名,得到 hmac_code

第三步:将hmac_code进行Base64 encode,最后再把签名参数再进行urlEncode,得到最终的签名sign(需要使用UTF-8字符集)

python2实现

#python 2.7

import time

import hmac

import hashlib

import base64

import urllib

timestamp = long(round(time.time() * 1000))

secret = 'xiegongzi' #秘钥

secret_enc = bytes(secret).encode('utf-8')

string_to_sign = '{}\n{}'.format(timestamp, secret) #把timestamp+"\n"+密钥 当做签名字符串 string_to_sign

string_to_sign_enc = bytes(string_to_sign).encode('utf-8')

hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest() #使用HmacSHA256算法计算签名,得到 hmac_code

hmac_code_base64=base64.b64encode(hmac_code) #将hmac_code进行Base64 encode

sign = urllib.quote_plus(hmac_code_base64) #进行urlEncode,得到最终的签名sign

print("sign = "+sign)

68bf7476bb9ef526d17c64719072db48.png

python3实现

#python 3.7

import time

import hmac

import hashlib

import base64

import urllib

from urllib import parse

timestamp = round(time.time() * 1000)

secret = 'xiegongzi' #秘钥

secret_enc = bytes(secret.encode('utf-8'))

string_to_sign = '{}\n{}'.format(timestamp, secret) #把 timestamp+"\n"+密钥 当做签名字符串 string_to_sign

string_to_sign_enc = bytes(string_to_sign.encode('utf-8'))

hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest() #使用HmacSHA256算法计算签名,得到 hmac_code

hmac_code_base64=base64.b64encode(hmac_code) #将hmac_code进行Base64 encode

sign = urllib.parse.quote(hmac_code_base64) #进行urlEncode,得到最终的签名sign

print("sign = "+sign)

e659ab92b6a0c826b3f745025f85f8e3.png

本文同步分享在 博客“谢公子”(CSDN)。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值