python 时间相关的操作
import datetime a = str(datetime.datetime.now().strftime('%y-%m-%d %H:%M:%S')) + ' 星期 ' + str(datetime.datetime.now().isoweekday()) print(a) # 结果:20-09-18 19:32:08 星期 5
import datetime a = str(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')) + ' 星期 ' + str(datetime.datetime.now().isoweekday()) print(a) # 结果:2020-09-18 19:32:08 星期 5
import datetime d = datetime.datetime.now().strftime('%F %T') print(d) # 结果:2020-09-21 16:13:18
import time d = time.strftime('%Y-%m-%d %H:%M:%S ',time.localtime(time.time())) print(d) # 结果:2020-09-21 16:13:18
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
|
时区信息对象
|
from datetime import date from datetime import datetime from datetime import timedelta # 计算两个日期相差多少天 d1 = date(2018, 10, 18) d2 = date(2017, 12, 31) print("(2018, 10, 18)与(2017, 12, 31)相差:", (d1 - d2).days, "天!") # (2018, 10, 18)与(2017, 12, 31)相差: 291 天! # 获取两个日期时间的时间差 time1 = datetime(2019, 1, 13, 12, 0, 0) time2 = datetime.now() differtime = (time1 - time2).total_seconds() print("(2019,1,13,12,0,0)与当前时间相差:", differtime, "秒!") # (2019,1,13,12,0,0)与当前时间相差: -53340090.286307 秒! # 当前日期 curdate = date.today() print("curdate =", curdate) # curdate = 2020-09-21 # 计算十天之后的日期时间 nowday = datetime.now() # timedelta类可以很容易地算出前几天和后几天的时刻。(timedelta(days= d, hours= h)) # 还可以查看第几周对应的时间,例如:timedelta(weeks=20) 20周将被自动转化为天数 # 前几天时刻,用减法。 后几天时刻,则用当前时间加上timedelta(days = d, hours= h) lastday = nowday + timedelta(days=10) print(str(lastday)) # 2020-10-01 20:41:30.286307 # ctime() 返回一个表示日期和时间的字符串。 print(lastday.ctime()) # Thu Oct 1 20:41:30 2020 # 查看某一天是今年的第几天和第几周 testday = date(2017, 8, 31) # isocalendar() 函数返回三元组 分别为:年份,周数,周几 print(testday.isocalendar()) # (2017, 35, 4) # timetuple() 返回时间元祖 print(testday.timetuple()) # time.struct_time(tm_year=2017, tm_mon=8, tm_mday=31, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=243, tm_isdst=-1)
# 获取当前时间 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())) # <class 'datetime.datetime'>
# 获取当前日期 from datetime import datetime print(datetime.now().date()) # 2018-10-08 print(type(datetime.now().date())) # <class 'datetime.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"))) # <class 'datetime.datetime'>
# 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)
# 当时时间 import time localtime = time.localtime() # 返回结构时间 asctime = time.asctime(localtime) # 将结构时间转换为asctime print(localtime) # 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) print(asctime) # 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
# Calendar # Calendar模块有很广泛的方法用来处理年历和月历 import calendar print("2018年的年历是:") print(calendar.prcal(2018)) cal = calendar.month(2018, 10) print("2018年10月的月历是:") print(cal) 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)
# 时间戳+秘钥生成sign验证 # 以下 时间戳+秘钥生成sign验证,广泛用于网站等进行验证. # 第一步:把 timestamp+"\n"+密钥 当做签名字符串 string_to_sign # 第二步:使用HmacSHA256算法计算签名,得到 hmac_code # 第三步:将hmac_code进行Base64 encode,最后再把签名参数再进行urlEncode,得到最终的签名sign(需要使用UTF-8字符集) 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)
# 将时间戳+秘钥生成sign验证封装成函数 import time import hmac import hashlib import base64 import urllib from urllib import parse def sign(strSecret): timesTamp = round(time.time() * 1000) secretEnc = bytes(strSecret.encode('utf8')) # 把 timesTamp+"\n"+密钥 当做签名字符串 string_to_sign stringToSign = '{}\n{}'.format(timesTamp, strSecret) stringToSignEnc = bytes(stringToSign.encode('utf8')) # 使用HmacSHA256算法计算签名,得到 hmacCode hmacCode = hmac.new(secretEnc, stringToSignEnc, digestmod=hashlib.sha256).digest() # 将hmacCode进行Base64 encode hmacCodeBase64 = base64.b64encode(hmacCode) # 将hmacCode进行Base64 encode signName = urllib.parse.quote(hmacCodeBase64) return signName
打印结果 | 解释 | |
print(time.strftime('%a')) | Mon | 星期几的简写 |
print(time.strftime('%A')) | Monday | 星期几的全称 |
print(time.strftime('%b')) | Sep | 月分的简写 |
print(time.strftime('%B')) | September | 月份的全称 |
print(time.strftime('%c')) | Mon Sep 21 17:21:42 2020 | 标准的日期的时间串 |
print(time.strftime('%C')) | 20 | 年份的后两位数字 |
print(time.strftime('%d')) | 21 | 十进制表示的每月的第几天 |
print(time.strftime('%D')) | 09/21/20 | 月/天/年 |
print(time.strftime('%e')) | 21 | 在两字符域中,十进制表示的每月的第几天 |
print(time.strftime('%F')) | 2020-09-21 | 年-月-日 |
print(time.strftime('%g')) | 20 | 年份的后两位数字 |
print(time.strftime('%G')) | 2020 | 使用基于周的年 |
print(time.strftime('%h')) | Sep | 简写的月份名 |
print(time.strftime('%H')) | 17 | 24小时制的小时 |
print(time.strftime('%I')) | 05 | 第几个小时(12小时制,01 - 12) |
print(time.strftime('%j')) | 265 | 十进制表示的每年的第几天 |
print(time.strftime('%m')) | 09 | 十进制表示的月份 |
print(time.strftime('%M')) | 21 | 十进制表示的分钟数 |
print(time.strftime('%p')) | PM | 本地的AM或PM的等价显示 |
print(time.strftime('%r')) | 05:21:43 PM | 12小时的时间 |
print(time.strftime('%R')) | 17:21 | 显示小时和分钟:hh:mm |
print(time.strftime('%S')) | 43 | 十进制的秒数 (01 - 61)不是59,闰年秒占两秒 |
print(time.strftime('%T')) | 17:21:43 | 显示时分秒:hh:mm:ss |
print(time.strftime('%u')) | 1 | 每周的第几天,星期一为第一天 (值从0到6,星期一为0) |
print(time.strftime('%U')) | 38 | 每年的第几周,把星期日做为第一天(值从0到53) |
print(time.strftime('%V')) | 39 | 每年的第几周,使用基于周的年 |
print(time.strftime('%w')) | 1 | 十进制表示的星期几(值从0到6,星期天为0) |
print(time.strftime("%W")) | 38 | 每年的第几周,把星期一做为第一天(值从0到53) |
print(time.strftime("%x")) | 09/21/20 | 标准的日期串 |
print(time.strftime('%X')) | 17:21:43 | 标准的时间串 |
print(time.strftime('%y')) | 20 | 不带世纪的十进制年份(值从0到99) |
print(time.strftime('%Y')) | 2020 | 带世纪部分的十制年份 |
print(time.strftime('%z')) | +0800 | 时区 |
print(time.strftime('%Z')) | 中国标准时间 | 时区名称,如果不能得到时区名称则返回空字符 |
print(time.strftime('%%')) | % | 百分号 |
计算当前时间是本年第几周:
import datetime datetime.datetime.now().isocalendar() # (2020, 37, 5):当前时间是2002年第37周周五
计算指定时间是当年第几周:
import datetime datetime.date(2020, 10, 1).isocalendar() # (2020, 40, 4):2020年10月1号是2020年第40周周4