python计算当前本月第几周_datetime默认当前时间

关于python处理时间常用的库,分别是time、datetime、calendar这三个库,以下是整理总结的常用方法:

1、time库

# 获取本地时间戳,返回浮点数
print(time.time())  # 1590921425.7660675

# 获取结构化时间,time.gmtime(时间戳),不传参默认当前 UTC时间
print(time.gmtime())  # time.struct_time(tm_year=2020, tm_mon=5, tm_mday=31, tm_hour=10, tm_min=38, tm_sec=23, tm_wday=6, tm_yday=152, tm_isdst=0)

# time.localtime(时间戳),不传参默认当前时间
print(time.localtime())  # time.struct_time(tm_year=2020, tm_mon=5, tm_mday=31, tm_hour=18, tm_min=41, tm_sec=7, tm_wday=6, tm_yday=152, tm_isdst=0), type-->class

# 结构时间-->时间戳
print(time.mktime(time.localtime()))  # 1590921819.0

# 字符串时间;time.asctime(结构化时间),不传参默认当前结构化时间
print(time.asctime())  # Sun May 31 18:44:57 2020
# time.ctime(时间戳),不传参默认当前时间戳
print(time.ctime())  # Sun May 31 18:47:23 2020

# 结构化时间-->字符串时间 time.strftime('时间格式'[,结构化时间]),不传参为默认当前时间
'''
格式化字符串 日期/时间说明 取值范围
%Y 年份 0000~9999
%m 月份(数字) 01~12
%B 月份(英文全称) January~December
%b 月份(英文缩写) Jan~Dec
%d 日期 01~31
%A 星期(英文全称) Monday~Sunday
%a 星期(英文缩写) Mon~Sun
%H 小时(24小时制) 00~23
%I 小时(12小时制) 01~12
%p 上/下午 AM,PM
%M 分钟 00~59
%S 秒 00~59
%X 本地时间表示
%w 星期(0-6),星期天为星期的开始
'''
print(time.strftime('%Y-%m-%d %H:%M:%S %A', time.localtime()))  # 2020-05-31 19:10:19 Sunday
print(time.strftime('%X'))  # 19:13:59

# 字符串时间-->结构化时间;time.strptime('字符串时间'[,时间格式]),字符串时间必须和时间格式对应
# 时间格式默认为 %a %b %d %H:%M:%S %Y
print(time.strptime('Thu Jun 1 10:10:10 2020'))  # time.struct_time(tm_year=2020, tm_mon=6, tm_mday=1, tm_hour=10, tm_min=10, tm_sec=10, tm_wday=3, tm_yday=153, tm_isdst=-1)
print(time.strptime('2020-06-01 16:04:08', '%Y-%m-%d %H:%M:%S'))  # time.struct_time(tm_year=2020, tm_mon=6, tm_mday=1, tm_hour=16, tm_min=4, tm_sec=8, tm_wday=0, tm_yday=153, tm_isdst=-1)

# 指定程序暂停时间;time.sleep(secs)
time.sleep(0.1) # 程序暂停0.1秒

2、datetime库 

相比较于time库,datetime库更加直观、更易于调用。

datetime库定义了五个类,分别是:

  • datetime.date: 表示日期的类
  • datetime.time: 表示时间的类
  • datetime.datetime: 表示日期时间的类
  • datetime.timedelta:表示时间间隔,即两个时间点的间隔
  • datetime.tzinfo:时区的的相关信息
from datetime import datetime
'''注意只import datetime 如此是没有.today()'''

# 返回表示今天本地时间的datetime对象
print(datetime.today())  # 2020-06-01 16:38:06.265554
print(type(datetime.today()))  # 
# 返回表示当前本地时间的datetime对象
print(datetime.now())  # 2020-06-01 16:41:15.314717
# 根据时间戳创建一个datetime对象
print(datetime.fromtimestamp(time.time()))  # 2020-06-01 16:42:34.630726

# datetime对象操作
dt = datetime.now()
print(dt.date())  # 2020-06-01
print(dt.time())  # 16:44:01.192386
# 返回替换后的datetime对象
print(dt.replace(year=2021, month=8, day=2))  # 2021-08-02 16:47:21.978268
# 返回指定格式的datetime对象
print(dt.strftime('%Y/%m/%d %H:%M:%S'))  # 2020/06/01 16:49:12

'''
datetime.timedelta
timedelta主要用来实现时间的运算
可以很方便的计算 天、分钟、秒的时间计算
'''
from datetime import timedelta

dt = datetime.now()
dt1 = dt + timedelta(days=-1)  # 昨天
dt2 = dt - timedelta(days=1)  # 昨天
dt3 = dt + timedelta(days=1)  # 明天
dt4 = dt + timedelta(hours=10)  # 10小时后
print(dt1, dt2, dt3, dt4)  # 2020-05-31 16:59:58.956540 2020-05-31 16:59:58.956540 2020-06-02 16:59:58.956540 2020-06-02 02:59:58.956540
print(dt + timedelta(days=8, hours=8, minutes=20, seconds=100, milliseconds=100, microseconds=100))  # 2020-06-10 02:24:45.156418

3、calendar库

相较于前面两个库,calendar拥有更高的可视化程度

# calendar库
import calendar

# 获取指定年份的日历字符串
print(calendar.calendar(2020))



python计算当前本月第几周_python计算当前本月第几周_02

输出:2020日历

# 获取指定月份的日历字符串
print(calendar.month(2020, 6))
'''
     June 2020
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
'''
# 以列表形式返回每个月的总天数
print(calendar.mdays)  # [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
# 返回指定月份的第一天是周几以及当月总天数
print(calendar.monthrange(2020, 6))  # (0, 30) (周一, 30天)
# 判断闰年
print(calendar.isleap(2020))  # True

Last、一些习题

from datetime import datetime
import calendar
import time

''' 第一题:打印出当前距离2020年9月1日有多少天多少小时多少分多少秒 '''
# 两个日期之间的差为
cha = datetime(2020, 9, 1, 16, 32) - datetime.now() # type 
# 相差的天数
days = cha.days
# 相差的月数
if days > 30:
    mons = days // 30  # 整除
    ds = days % 30  # 取余
# print(days)
# 方法一:分割cha为列表
cha_list1 = str(cha).split()
print(cha_list1)  # ['91', 'days,', '5:34:54.688354']
cha_list2 = cha_list1[2].split(':')
print("两个时间相差%d月%d天%d小时%d分钟%d秒" % (mons ,ds, int(cha_list2[0]), int(cha_list2[1]), int(cha_list2[2][:2])))
# 两个时间相差91天5小时28分钟1秒  两个时间相差3月1天5小时4分钟39秒

# 方法二:
# 相差的秒数
remain_seconds = cha.seconds
# 相差的小时数
hours = remain_seconds // 3600
# 相差的分钟数
minutes = remain_seconds % 3600 // 60
# 相差的秒数
seconds = remain_seconds % 60
print("两个时间相差%d月%d天%d小时%d分钟%d秒" % (mons ,ds, hours, minutes, seconds))  # 两个时间相差3月1天4小时41分钟35秒


''' 第二题:打印出20个月后的日期 '''
# cur = datetime.now()
def getDate(cur, ms):
    year = cur.year  # 当前年
    month = cur.month  # 当前月
    day = cur.day  # 当前天

    # 计算20个月之后的天数
    total_month = month + ms  # 总的月数
    y_plus = total_month // 12  # 需要增加的年数
    new_month = total_month % 12  # 新的月份 0,1,2……11
    # 月份为0
    if new_month == 0:
        y_plus -= 1
        new_month = 12
    # 处理2月份的情况及新的月份为30天的情况
    if new_month == 2 and calendar.isleap(year + y_plus):
        mdays = 29
    else:
        mdays = calendar.mdays[new_month]
    # 如果当前天数大于新月份总天数,不外乎两种情况:1.2月 2.当前为31日,新月份总天数30日。这个时候月份加1
    if mdays         new_month += 1
        day = day - mdays
    return year+y_plus, new_month, day

cur = datetime.now()
new_date_tuple = getDate(cur, 20)  # (2022, 2, 2)
# 20个月后的日期
new_date = cur.replace(new_date_tuple[0], new_date_tuple[1], new_date_tuple[2])
print(new_date)  # 2022-02-02 16:55:59.228952

''' 第三题:打印出指定格式的日期 例如:2020年6月2日 星期二 17:08:32 '''
# 星期*
def getWeek(w):
    if w == '1':
        week = '星期一'
    elif w == '2':
        week = '星期二'
    elif w == '3':
        week = '星期三'
    elif w == '4':
        week = '星期四'
    elif w == '5':
        week = '星期五'
    elif w == '6':
        week = '星期六'
    else:
        week = '星期日'
    return week

# print(type(time.strftime('%w', time.localtime())))  # 
w = time.strftime('%w', time.localtime())
# print(getWeek(w))
# 输出指定格式
print(time.strftime("%Y{}%m{}%d{} {} %H:%M:%S", time.localtime()).format('年', '月', '日', getWeek(w)))  # 2020年06月02日 星期二 17:31:16

''' 打印出当前距离指定日期差多少天 多少时 多少分 多少秒 '''

def cha(year, month, day):
    a_datetime = datetime(year, month, day) - datetime.now()
    print('当前时间距%d年%d月%d日还有%d天%d时%d分%d秒' % (year, month, day, a_datetime.days, a_datetime.seconds//3600, a_datetime.seconds % 3600//60, a_datetime.seconds%60))

cha(2020, 6, 3)  # 当前时间距2020年6月3日还有0天6时11分29秒