又肝了3天,整理了80个Python DateTime 例子,必须收藏!(下)

简介: 又肝了3天,整理了80个Python DateTime 例子,必须收藏!(下)

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


相关文章
|
2月前
|
Python
Datetime模块应用:Python计算上周周几对应的日期
Datetime模块应用:Python计算上周周几对应的日期
80 1
|
2月前
|
数据处理 Python
Python编程-利用datetime模块生成当前年份之前指定的间隔所有年份的日期列表和csv文件
Python编程-利用datetime模块生成当前年份之前指定的间隔所有年份的日期列表和csv文件
21 1
|
2月前
|
数据处理 Python
Python内置时间模块:Datetime实例详解(一)
Python内置时间模块:Datetime实例详解(一)
33 1
|
2月前
|
Python
Python内置时间模块:Datetime实例详解(二)
Python内置时间模块:Datetime实例详解(二)
77 0
|
2月前
|
开发者 Python
Python 时间处理与时区转换:深入探究 datetime、time 模块与 pytz 库的功能与应用
Python 时间处理与时区转换:深入探究 datetime、time 模块与 pytz 库的功能与应用
15 0
|
3月前
|
Python
30天拿下Python之datetime模块
30天拿下Python之datetime模块
21 0
|
3月前
|
Python
Python时间戳与datetime转换指南
Python时间戳与datetime转换指南
200 0
|
5月前
|
存储 Python
Python之日期和时间包datetime的使用
1、基本定义 1.1 时间戳 时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数(或总毫秒数)。 网上有很多时间戳在线转换工具,可以自行计算验证。
|
4月前
|
Python
【Python】对key或values是datetime类型或时间字符串的字典dict排序
本文提供了针对字典中key为时间字符串或datetime类型时进行排序的解决方案,包括将时间字符串转换为datetime对象排序和直接对datetime类型的key排序的方法。
41 0
|
6月前
|
Python
python datetime处理时间的详细分析
python datetime处理时间的详细分析
29 0