41获得一个月的最后一天
import calendar print(calendar.monthrange(2002, 1)[1]) print(calendar.monthrange(2008, 6)[1]) print(calendar.monthrange(2012, 2)[1]) print(calendar.monthrange(2015, 2)[1])
Output:
31 30 29 28
42从工作日值中获取工作日名称
import calendar print(calendar.day_name[0]) print(calendar.day_name[1]) print(calendar.day_name[2]) print(calendar.day_name[3]) print(calendar.day_name[4]) print(calendar.day_name[5]) print(calendar.day_name[6])
Output:
Monday Tuesday Wednesday Thursday Friday Saturday Sunday
43将 N 小时数添加到当前日期时间
from datetime import datetime, timedelta d = datetime.today() + timedelta(hours=18) print(d)
Output:
2021-05-16 07:36:08.189948
44从当前日期获取年、月、日、小时、分钟
import datetime now = datetime.datetime.now() print(now.year, now.month, now.day, now.hour, now.minute, now.second)
Output:
2021 5 15 14 27 33
45获取特定月份和年份的最后一个星期日
import calendar month = calendar.monthcalendar(2021, 2) last_sunday = max(month[-1][calendar.SUNDAY], month[-2][calendar.SUNDAY]) print(last_sunday)
Output:
28
46查找特定日期的年份中的哪一天
import pendulum dt = pendulum.parse('2015-05-18') print(dt.day_of_year) dt = pendulum.parse('2019-12-01') print(dt.day_of_year) dt = pendulum.parse('2018-01-21') print(dt.day_of_year)
Output:
138 335 21
47查找当前日期是工作日还是周末
import datetime weekno = datetime.datetime.today().weekday() if weekno < 5: print("Weekday") else: # 5 Sat, 6 Sun print("Weekend")
Output:
Weekday
48组合 datetime.date 和 datetime.time 对象
import datetime d = datetime.datetime.combine(datetime.date(2020, 11, 14), datetime.time(10, 23, 15)) print(d)
Output:
2020-11-14 10:23:15
49获得每月的第 5 个星期一
import calendar c = calendar.Calendar(firstweekday=calendar.SUNDAY) year = 2016 month = 2 monthcal = c.monthdatescalendar(year, month) try: fifth_monday = [day for week in monthcal for day in week if day.weekday() == calendar.MONDAY and day.month == month][4] print(fifth_monday) except IndexError: print('No date found')
Output:
2016-02-29
50将日期时间对象转换为日期对象
from datetime import datetime datetime_obj = datetime(2020, 12, 15, 10, 15, 45, 321474) print(datetime_obj) date_obj = datetime_obj.date() print(date_obj)
Output:
2020-12-15 10:15:45.321474 2020-12-15
51获取没有微秒的当前日期时间
from datetime import datetime print(datetime.now().isoformat(' ', 'seconds'))
Output:
2021-05-15 12:55:45
52将 N 秒数添加到特定日期时间
import datetime a = datetime.datetime(2020, 12, 31, 23, 59, 45) b = a + datetime.timedelta(seconds=30) print(a) print(b)
Output:
2020-12-31 23:59:45 2021-01-01 00:00:15
53从当前日期获取两位数的月份和日期
import datetime dt = datetime.datetime.now() print(dt.strftime('%m')) print('{:02d}'.format(dt.month)) print(f'{dt.month:02d}') print('%02d' % dt.month) print(dt.strftime('%d')) print('{:02d}'.format(dt.day)) print(f'{dt.day:02d}') print('%02d' % dt.day)
Output:
05 05 05 05 15 15 15 15
54从特定日期获取月份数据的开始和结束日期
import pendulum dt = pendulum.datetime(2012, 9, 5) start = dt.start_of('month') print(start.to_datetime_string()) end = dt.end_of('month') print(end.to_datetime_string())
Output:
2012-09-01 00:00:00 2012-09-30 23:59:59
55以周为单位的两个日期之间的差异
from datetime import date date1 = date(2020, 12, 23) date2 = date(2021, 5, 11) days = abs(date1 - date2).days print(days // 7)
Output:
19
56将字符串格式的日期转换为 Unix 时间戳
import datetime stime = '15/05/2021' print(datetime.datetime.strptime(stime, "%d/%m/%Y").timestamp())
Output:
1621017000.0
57获取最后一个周日和周六的日期
from datetime import datetime, timedelta def prior_week_end(): return datetime.now() - timedelta(days=((datetime.now().isoweekday() + 1) % 7)) def prior_week_start(): return prior_week_end() - timedelta(days=6) print('Sunday', format(prior_week_start())) print('Saturday', format(prior_week_end()))
Output:
Sunday 2021-05-09 13:13:30.057765 Saturday 2021-05-15 13:13:30.058912
58检查对象是否属于 datetime.date 类型
import datetime x = '2012-9-1' y = datetime.date(2012, 9, 1) print(isinstance(x, datetime.date)) print(isinstance(y, datetime.date))
Output:
False True
59获取特定日期的周数
import datetime print(datetime.date(2020, 5, 15).isocalendar()[1])
Output:
20
60获取 UTC 时间
from datetime import datetime dt = datetime.utcnow() print(dt)
Output:
2021-05-15 17:01:31.008808
61获取本周的开始和结束日期
import pendulum today = pendulum.now() start = today.start_of('week') print(start.to_datetime_string()) end = today.end_of('week') print(end.to_datetime_string())
Output:
2021-05-10 00:00:00 2021-05-16 23:59:59
62两个日期之间的差异(以分钟为单位)
from datetime import datetime fmt = '%Y-%m-%d %H:%M:%S' d1 = datetime.strptime('2010-01-01 17:31:22', fmt) d2 = datetime.strptime('2010-01-03 17:31:22', fmt) days_diff = d2 - d1 print(days_diff.days * 24 * 60)
Output:
2880
63将日期时间对象转换为日期字符串
import datetime t = datetime.datetime(2020, 12, 23) x = t.strftime('%m/%d/%Y') print(x)
Output:
12/23/2020
64获得上周五
from datetime import date from datetime import timedelta today = date.today() offset = (today.weekday() - 4) % 7 friday = today - timedelta(days=offset) print(friday)
Output:
2021-05-14
65将 3 周添加到任何特定日期
import pendulum dt = pendulum.datetime(2012, 2, 15) dt = dt.add(weeks=3) print(dt.to_date_string())
Output:
2012-03-07
66在其他两个日期之间生成一个随机日期
import random import time def str_time_prop(start, end, time_format, prop): stime = time.mktime(time.strptime(start, time_format)) etime = time.mktime(time.strptime(end, time_format)) ptime = stime + prop * (etime - stime) return time.strftime(time_format, time.localtime(ptime)) def random_date(start, end, prop): return str_time_prop(start, end, '%m/%d/%Y %I:%M %p', prop) print(random_date("1/1/2020 1:10 PM", "1/1/2021 1:10 AM", random.random()))
Output:
02/25/2020 08:26 AM
67查找从今天开始的第一个星期一的日期
from dateutil.rrule import rrule, WEEKLY, MO from datetime import date next_monday = rrule(freq=WEEKLY, dtstart=date.today(), byweekday=MO, count=1)[0] print(next_monday)
Output:
2021-05-17 00:00:00
68两个日期之间的差异(以天为单位)
from datetime import date d1 = date(2019, 8, 18) d2 = date(2021, 12, 10) days_diff = d2 - d1 print(days_diff.days)
Output:
845
69向当前日期添加六个月
from datetime import datetime from dateutil.relativedelta import * date = datetime.now() print(date) date = date + relativedelta(months=+6) print(date)
Output:
2021-05-15 13:48:52.135612 2021-11-15 13:48:52.135612
70将数据时间对象转换为 Unix(时间戳)
import datetime import time # Saturday, October 10, 2015 10:10:00 AM date_obj = datetime.datetime(2015, 10, 10, 10, 10) print("Unix Timestamp: ", (time.mktime(date_obj.timetuple())))
Output:
Unix Timestamp: 1444452000.0
71将年、月、日、时、分、秒的 N 个数字添加到当前日期时间
import datetime from dateutil.relativedelta import relativedelta add_days = datetime.datetime.today() + relativedelta(days=+6) add_months = datetime.datetime.today() + relativedelta(months=+6) add_years = datetime.datetime.today() + relativedelta(years=+6) add_hours = datetime.datetime.today() + relativedelta(hours=+6) add_mins = datetime.datetime.today() + relativedelta(minutes=+6) add_seconds = datetime.datetime.today() + relativedelta(seconds=+6) print("Current Date Time:", datetime.datetime.today()) print("Add 6 days:", add_days) print("Add 6 months:", add_months) print("Add 6 years:", add_years) print("Add 6 hours:", add_hours) print("Add 6 mins:", add_mins) print("Add 6 seconds:", add_seconds)
Output:
Current Date Time: 2017-04-04 18:32:10.192671 Add 6 days: 2017-04-10 18:32:10.191671 Add 6 months: 2017-10-04 18:32:10.192671 Add 6 years: 2023-04-04 18:32:10.192671 Add 6 hours: 2017-04-05 00:32:10.192671 Add 6 mins: 2017-04-04 18:38:10.192671 Add 6 seconds: 2017-04-04 18:32:16.192671
72获取指定开始日期和结束日期之间的日期范围
import datetime start = datetime.datetime.strptime("2016-06-15", "%Y-%m-%d") end = datetime.datetime.strptime("2016-06-30", "%Y-%m-%d") date_array = \ (start + datetime.timedelta(days=x) for x in range(0, (end-start).days)) for date_object in date_array: print(date_object.strftime("%Y-%m-%d"))
Output:
2016-06-15 2016-06-16 2016-06-17 2016-06-18 2016-06-19 2016-06-20 2016-06-21 2016-06-22 2016-06-23 2016-06-24 2016-06-25 2016-06-26 2016-06-27 2016-06-28 2016-06-29
73减去 N 个年、月、日、时、分、秒到当前日期时间
import datetime from dateutil.relativedelta import relativedelta sub_days = datetime.datetime.today() + relativedelta(days=-6) sub_months = datetime.datetime.today() + relativedelta(months=-6) sub_years = datetime.datetime.today() + relativedelta(years=-6) sub_hours = datetime.datetime.today() + relativedelta(hours=-6) sub_mins = datetime.datetime.today() + relativedelta(minutes=-6) sub_seconds = datetime.datetime.today() + relativedelta(seconds=-6) print("Current Date Time:", datetime.datetime.today()) print("Subtract 6 days:", add_days) print("Subtract 6 months:", add_months) print("Subtract 6 years:", add_years) print("Subtract 6 hours:", add_hours) print("Subtract 6 mins:", add_mins) print("Subtract 6 seconds:", add_seconds)
Output:
Current Date Time: 2017-04-04 18:36:29.213046 Subtract 6 days: 2017-03-29 18:36:29.213046 Subtract 6 months: 2016-10-04 18:36:29.213046 Subtract 6 years: 2011-04-04 18:36:29.213046 Subtract 6 hours: 2017-04-04 12:36:29.213046 Subtract 6 mins: 2017-04-04 18:30:29.213046 Subtract 6 seconds: 2017-04-04 18:36:23.213046
74获取指定年份和月份的月份第一天的工作日和月份的天数
import calendar print("Year:2002 - Month:2") month_range = calendar.monthrange(2002, 2) print("Weekday of first day of the month:", month_range[0]) print("Number of days in month:", month_range[1]) print() print("Year:2010 - Month:5") month_range = calendar.monthrange(2010, 5) print("Weekday of first day of the month:", month_range[0]) print("Number of days in month:", month_range[1])
Output:
Year:2002 - Month:2 Weekday of first day of the month: 4 Number of days in month: 28 Year:2010 - Month:5 Weekday of first day of the month: 5 Number of days in month: 31
75打印特定年份的所有星期一
from datetime import date, timedelta year = 2018 date_object = date(year, 1, 1) date_object += timedelta(days=1-date_object.isoweekday()) while date_object.year == year: print(date_object) date_object += timedelta(days=7)
Output:
2018-01-01 2018-01-08 2018-01-15 2018-01-22 2018-01-29 2018-02-05 2018-02-12 ... 2018-11-12 2018-11-19 2018-11-26 2018-12-03 2018-12-10 2018-12-17 2018-12-24 2018-12-31
76打印特定年份的日历
import calendar cal_display = calendar.TextCalendar(calendar.MONDAY) # Year: 2019 # Column width: 1 # Lines per week: 1 # Number of spaces between month columns: 0 # No. of months per column: 2 print(cal_display.formatyear(2019, 1, 1, 0, 2))
Output:
略
77从月份编号中获取月份名称
import calendar import datetime # Month name from number print("Month name from number 5:") month_num = 1 month_abre = datetime.date(2015, month_num, 1).strftime('%b') month_name = datetime.date(2015, month_num, 1).strftime('%B') print("Short Name:", month_abre) print("Full Name:", month_name) print("\nList of all months from calendar") # Print list of all months from calendar for month_val in range(1, 13): print(calendar.month_abbr[month_val], "-", calendar.month_name[month_val])
Output:
Month name from number 5: Short Name: Jan Full Name: January List of all months from calendar Jan - January Feb - February Mar - March Apr - April May - May Jun - June Jul - July Aug - August Sep - September Oct - October Nov - November Dec - December
78从给定日期获取一周的开始和结束日期
from datetime import datetime, timedelta date_str = '2018-01-14' date_obj = datetime.strptime(date_str, '%Y-%m-%d') start_of_week = date_obj - timedelta(days=date_obj.weekday()) # Monday end_of_week = start_of_week + timedelta(days=6) # Sunday print(start_of_week) print(end_of_week)
Output:
2018-01-08 00:00:00 2018-01-14 00:00:00
79根据当前日期查找上一个和下一个星期一的日期
import datetime today = datetime.date.today() last_monday = today - datetime.timedelta(days=today.weekday()) coming_monday = today + datetime.timedelta(days=-today.weekday(), weeks=1) print("Today:", today) print("Last Monday:", last_monday) print("Coming Monday:", coming_monday)
Output:
Today: 2018-01-21 Last Monday: 2018-01-15 Coming Monday: 2018-01-22
80获取当前季度的第一个日期和最后一个日期
from datetime import datetime, timedelta current_date = datetime.now() current_quarter = round((current_date.month - 1) / 3 + 1) first_date = datetime(current_date.year, 3 * current_quarter - 2, 1) last_date = datetime(current_date.year, 3 * current_quarter + 1, 1)\ + timedelta(days=-1) print("First Day of Quarter:", first_date) print("Last Day of Quarter:", last_date)
Output:
First Day of Quarter: 2018-01-01 00:00:00 Last Day of Quarter: 2018-03-31 00:00:00