目录
格式化符号
1、获取当前日期时间并进行转换
2、字符串↔时间戳
3、日期戳(五位整数)转日期格式
4、时区字符转日期时间
5、获取当前第几周
6、根据第几周获取日期
7、根据日期获取年周(划分周)
增减天、时、分、秒
天数差
月份差
日期转字符不自动补零
返回当前日期星期几
判断变量是否为日期
符号-小写 |
描述 |
符号-大写 |
描述 |
%a |
本地简化星期名称 |
%A |
本地完整星期名称 |
%b |
本地简化的月份名称 |
%B |
本地完整的月份名称 |
%c |
本地相应的日期表示和时间表示 |
||
%d |
月内中的一天(0-31) |
%D |
%m/%d/%y的简写 |
%F |
%Y-%m-%d的简写 |
||
%H |
24小时制小时数(00-23) |
||
%I |
12小时制小时数(01-12) |
||
%j |
年内的一天(001-366) |
||
%m |
月份(01-12) |
%M |
分钟数(00=59) |
%S |
秒(00-59) |
||
%p |
本地A.M.或P.M.的等价符 |
||
%U |
一年中的星期数(00-53)星期天为星期的开始 |
||
%w |
星期(0-6),星期天为星期的开始 |
%W |
一年中的星期数(00-53)星期一为星期的开始 |
%x |
本地相应的日期表示 |
%X |
本地相应的时间表示 |
%y |
两位数的年份表示(00-99) |
%Y |
四位数的年份表示(000-9999) |
%Z |
当前时区的名称 |
||
%% |
%号本身 |
time.time()
1657284531.02981 类型:floattime.localtime(time.time())
类型:time.struct_timetime.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
类型:strdatetime.now()
datetime.datetime(2022, 7, 8, 21, 3, 15, 550059) 类型:datetimedatetime.now().timetuple()
datetime.strftime(datetime.now(), '%Y-%m-%d %H:%M:%S')
datetime.timestamp(datetime.now())
字符串➡时间戳
time.mktime(time.strptime(time_str, '%Y-%m-%d %H:%M:%S'))
datetime.timestamp(datetime.strptime(datetime_str, '%Y-%m-%d %H:%M:%S'))
time.mktime(pd.to_datetime(date_str).timetuple())
时间戳➡字符串:
datetime.strftime(datetime.fromtimestamp(datetime_stamp2), '%Y-%m-%d %H:%M:%S')
pd.to_datetime('1899-12-30') + pd.Timedelta(str(stamp)+'D')
pd.to_datetime('1899-12-30') + pd.Timedelta(str(44582)+'D')
Timestamp('2022-01-21 00:00:00')
pd.to_datetime('1899-12-30') + pd.Timedelta(str(44582.1242324)+'D')
Timestamp('2022-01-21 02:58:53.679360')
time_str = "Fri Jul 08 20:22:37 +0800 2022"
datetime.fromtimestamp(time.mktime(time.strptime(time_string, '%a %b %d %H:%M:%S +0800 %Y')))
方法一:time.strftime("%W")
方法二:datetime.now().isocalendar()[1]
或datetime(2018,6,30).isocalendar()[1]
方法三:time.localtime()[7]/7+1
from datetime import datetime, timedelta, date
import calendar
def get_date_range_by_week(week_number, year):
# 获取给定年份的第一天
first_day = date(year, 1, 1)
# 获取给定年份的最后一天
last_day = date(year, 12, 31)
# 计算第一天所在周的周一的日期
first_weekday = first_day - timedelta(days=first_day.weekday())
# 计算最后一天所在周的周日的日期
last_weekday = last_day + timedelta(days=(6 - last_day.weekday()))
# 获取给定周数的起始日期
start_date = first_weekday + timedelta(weeks=week_number - 1)
# 获取给定周数的结束日期
end_date = start_date + timedelta(days=6)
return start_date, end_date
print(get_date_range_by_week(20, 2023))
比如2019年第46周 周一的日期
wk = '2019-W46-1'
datetime.strptime(wk, '%Y-W%W-%w')
def str2date(string):
"""将字符串日期、周次转为日期
字符串日期格式:2022.7.1 2022.07.01 7.1
周次格式:W52
"""
string = string.strip('/')
if re.search('W\d{1,2}', string, re.IGNORECASE):
week = int(re.search('\d{1,2}', string).group())
current_week = datetime.now().isocalendar()[1]
years = datetime.now().year if week <= current_week else datetime.now().year - 1
wk = str(years) + '-W' + str(week) + '-1'
date = datetime.strptime(wk, '%Y-W%W-%w')
else:
if string.count('.') == 1:
years = datetime.now().year if int(string.split('.')[0]) < datetime.now().month else datetime.now().year - 1
string = str(years) + '.' + string
date = datetime.strptime(string, '%Y.%m.%d')
return date
Python,获取指定日期所在周次,以及周次的日期范围
Python 给定周数,返回其对应的日期范围-CSDN博客
python-根据给定的时间范围计算年、季、月、周的开始和结束日期_python strftime 季-CSDN博客
需求:不跨年划分,以星期一为开始,星期天为结束,如果第一周的天数小于3天,则将其划入第二周一起算第一周,下一周算第二周,依次类推
from datetime import datetime, timedelta
def get_week_number(date):
"""
不跨年划分,以星期一为开始,星期天为结束,如果第一周的天数小于3天,则将其划入第二周一起算第一周,下一周算第二周,依次类推
"""
start_date = datetime(date.year, 1, 1) # 一年的开始日期
start_weekday = start_date.weekday() # 一年的开始日期是星期几
# 如果一年的开始日期大于星期四,则将其调整为下一个星期一,否则将其调整为当前星期一
if start_weekday > 3:
start_date += timedelta(days=(7 - start_weekday))
else:
start_date += timedelta(days=(- start_weekday))
# print(start_date)
diff = (date - start_date) + timedelta(days=1)
if date < start_date:
return 1
week_number = diff.days // 7 + (1 if diff.days % 7 > 0 else 0)
if start_weekday < 3:
week_number += 1
return week_number
# 示例日期列表
dates = [
datetime(2022, 1, 1), # 第1周 星期六
datetime(2022, 12, 31), # 第52周 星期六
datetime(2023, 1, 1), # 第1周 星期天
datetime(2023, 1, 2), # 第1周
datetime(2023, 1, 8), # 第1周
datetime(2023, 1, 9), # 第2周
datetime(2023, 1, 15), # 第2周
datetime(2023, 6, 25), # 第25周
]
# 根据日期划分周并打印结果
for date in dates:
week_number = get_week_number(date)
print(f"{date.date()} belongs to week {week_number}")
from datetime import datetime
EndDate = Date.today()+timedelta(days=10)
增加年、月
import datetime
dt = datetime.datetime.now() # 获取当前日期时间
print("原始日期时间:", dt)
# 修改年份为2022
new_dt = dt.replace(year=2022)
print("修改后的日期时间:", new_dt)
# 方法1
# (1)先将字符串-->时间格式date
date1 = datetime.datetime.strptime(d1, "%Y-%m-%d").date()
date2 = datetime.datetime.strptime(d2, "%Y-%m-%d").date()
a1 = (date2 - date1).days # 计算两个日期date的天数差
print("a1", a1)
# 方法2
a2 = (parser.parse(d2) - parser.parse(d1)).days
print("a2", a2)
# 方法3
a3 = rrule.rrule(rrule.DAILY, dtstart=date1, until=date2).count()
print("a3", a3)
# datetime形式天数差
date1 = datetime.datetime(2022, 7, 26, 15, 35, 10)
date2 = datetime.datetime(2022, 8, 1, 18, 30, 20)
# 方法1
b1 = (date2 - date1).days
print("b1", b1)
# 方法2
b2 = (parser.parse(d2) - parser.parse(d1)).days
print("b2", b2)
# 方法3
b3 = rrule.rrule(rrule.DAILY, dtstart=date1, until=date2).count()
print("b3", b3)
-----------------------------------
python datetime 计算两个日期之间的天数差
https://blog.51cto.com/u_12461028/5575525
计算两个timestamp相差天数:
import datetime
# 将时间戳转换为日期格式
date1 = datetime.datetime.fromtimestamp(timestamp1)
date2 = datetime.datetime.fromtimestamp(timestamp2)
# 提取日期部分,忽略时间部分
date1 = date1.date()
date2 = date2.date()
# 计算日期之间的差异
difference = date2 - date1
# 获取差异的天数
days = difference.days
print("时间戳相差的天数:", days)
from datetime import date
from dateutil.relativedelta import relativedelta
# 给定的年月
year1 = 2022
month1 = 5
year2 = 2023
month2 = 2
# 构建日期对象
date1 = date(year1, month1, 1)
date2 = date(year2, month2, 1)
# 计算月份数
delta = relativedelta(date2, date1)
months_difference = delta.months + 12 * delta.years
# 打印结果
print(months_difference)
对于Linux 需要在字段类型前加上 -
对于win 需要再字段类型前加上 #
format = "%Y-%#m-%#d %H:%M:%S"
datetime.today().weekday()
datetime.strptime("2023-02-22","%Y-%m-%d").weekday()
返回值: