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

 

 

 

 

 

 

 

 

posted @ 2020-11-27 21:14  至尊宝呜呜呜  阅读(212)  评论(0编辑  收藏  举报