Python常用日期函数和日期处理方法

发布时间:2024年01月11日

Python常用日期函数和日期处理方法

Python常用的日期处理函数使用案例, 和一些简单的日期处理方法(持续更新)

1. 使用time获取当前的日期和时间
import time
from time import gmtime, strftime

t = time.localtime()
print (t) 
# time.struct_time(tm_year=2024, tm_mon=1, tm_mday=4, tm_hour=11, tm_min=21, tm_sec=34, tm_wday=3, tm_yday=4, tm_isdst=0)
print (time.asctime(t)) # Thu Jan  4 11:21:34 2024
print (gmtime()) 
# time.struct_time(tm_year=2024, tm_mon=1, tm_mday=4, tm_hour=3, tm_min=21, tm_sec=34, tm_wday=3, tm_yday=4, tm_isdst=0)
print (strftime("%a, %d, %b, %Y, %H:%M:%S", gmtime())) # Thu, 04, Jan, 2024, 03:21:34
print (strftime("%a", gmtime()))    # 周   		# Thu
print (strftime("%A", gmtime()))    # 周   		# Thursday
print (strftime("%d", gmtime()))    # 日   		# 04
print (strftime("%D", gmtime()))    # 日   		# 01/04/24
print (strftime("%b", gmtime()))    # 月   		# Jan
print (strftime("%B", gmtime()))    # 月   		# January
print (strftime("%y", gmtime()))    # 年   		# 24
print (strftime("%Y", gmtime()))    # 年   		# 2024
print (strftime("%H", gmtime()))    # 小时(24)	# 03
print (strftime("%I", gmtime()))    # 小时(12)	# 03
print (strftime("%M", gmtime()))    # 分钟   	    # 21
print (strftime("%s", gmtime()))    # 时间戳      # 1704309694
print (strftime("%S", gmtime()))    # 秒   		# 34
print (strftime("%j", gmtime()))    # 一年第几天   # 004
print (strftime("%U", gmtime()))    # 一年第几周   # 00
print (strftime("%W", gmtime()))    # 一年第几周   # 01
print ("**************************")
print (time.localtime())
# time.struct_time(tm_year=2024, tm_mon=1, tm_mday=4, tm_hour=11, tm_min=31, tm_sec=34, tm_wday=3, tm_yday=4, tm_isdst=0)
print (strftime("%a", time.localtime()))    # 周   # Thu
print (strftime("%A", time.localtime()))    # 周   # Thursday
print (strftime("%d", time.localtime()))    # 日   # 04
print (strftime("%D", time.localtime()))    # 日   # 01/04/24
print (strftime("%b", time.localtime()))    # 月   # Jan
print (strftime("%B", time.localtime()))    # 月   # January
print (strftime("%y", time.localtime()))    # 年   # 24
print (strftime("%Y", time.localtime()))    # 年   # 2024
print (strftime("%H", time.localtime()))    # 小时(24)   # 11
print (strftime("%I", time.localtime()))    # 小时(12)   # 11
print (strftime("%M", time.localtime()))    # 分钟   # 31
print (strftime("%s", time.localtime()))    # 时间戳   # 1704339094
print (strftime("%S", time.localtime()))    # 秒   # 34
print (strftime("%j", time.localtime()))    # 一年第几天   # 004
print (strftime("%U", time.localtime()))    # 一年第几周   # 00
print (strftime("%W", time.localtime()))    # 一年第几周   # 01

# 将时间戳转换为日期格式
print (strftime("%Y-%m-%d %H:%M:%S", gmtime(1704339094))) # 2024-01-04 03:31:34
print (strftime("%Y-%m-%d %H:%M:%S", time.localtime(1704339094))) # 2024-01-04 11:31:34
gmtime() 函数用于获取当前时间的格林威治标准时间(GMT)的表示形式。它返回一个 time.struct_time 对象,该对象包含了当前时间的年、月、日、时、分、秒、一周中的哪一天以及夏令时标志等信息。这个表示形式与标准的日期和时间格式相同,但表示的是标准时区的时刻。在 Python 中,gmtime() 常用于获取时间信息并进行分析和处理。

%a: 星期几的缩写,例如:"Mon" 表示星期一。
%A: 星期几的全名,例如:"Monday" 表示星期一。
%b: 月份的缩写,例如:"Jan" 代表一月。
%B: 月份的全名,例如:"January" 代表一月。
%d: 月份中的日期,以两位数的形式显示,例如:"01""31"。
%D: 日期的简写形式,等同于 "%m/%d/%y"。
%Y: 四位数的年份,例如:"2024"。
%y: 两位数的年份,例如:"24"。
%H: 小时(24小时制),例如:"00""23"。
%I: 小时(12小时制),例如:"01""12"。
%M: 分钟,例如:"00""59"。
%S: 秒数,例如:"00""59"。
%s: 从 Epoch(1970年1月1日)以来的秒数。
%j: 年份中的一天,例如:"001""366"。
%U: 年份中的周数(周日作为一周的开始),例如:"00""53"。
%W: 年份中的周数(周一作为一周的开始),例如:"00""53"
2. 使用Panda获取当前的日期和时间
import pandas as pd

print (pd.datetime.now())              # 2024-01-04 12:10:08.095149
print (pd.datetime.now().hour)         # 12
print (pd.datetime.now().minute)       # 10    
print (pd.datetime.now().second)       # 8    
print (pd.datetime.now().year)         # 2024
print (pd.datetime.now().month)        # 1
print (pd.datetime.now().day)          # 4
print (pd.datetime.now().microsecond)  # 95826    
print (pd.datetime.now().date())       # 2024-01-04    
hour:当前时间的小时数
minute:当前时间的分钟数
second:当前时间的秒数
year:当前时间的年数
month:当前时间的月数
day:当前时间的日数
microsecond:当前时间的微秒数
3. 将字符串日期, 转化为日期时间对象
from datetime import datetime
from dateutil import parser

date1 = "2024-01-01 12:02:16"
date2 = "2024/01/01 12:02:16"
date3 = "Jan 01 2024 12:02:16"
date4 = "2024 Jan 01 2:02:16PM"

# 已知日期格式
date_1 = datetime.strptime(date1, "%Y-%m-%d %H:%M:%S")
print(type(date_1)) # <class 'datetime.datetime'>
print(date_1) # 2024-01-01 12:02:16

date_2 = datetime.strptime(date2, "%Y/%m/%d %H:%M:%S")
print(type(date_2)) # <class 'datetime.datetime'>
print(date_2) # 2024-01-01 12:02:16

date_3 = datetime.strptime(date3, "%b %d %Y %H:%M:%S")
print(type(date_3)) # <class 'datetime.datetime'>
print(date_3) # 2024-01-01 12:02:16

date_4 = datetime.strptime(date4, "%Y %b %d %I:%M:%S%p")
print(type(date_4)) # <class 'datetime.datetime'>
print(date_4) # 2024-01-01 14:02:16

# 日期格式未知
date_1_1 = parser.parse(date1)
print(type(date_1_1)) # <class 'datetime.datetime'>
print(date_1_1) # 2024-01-01 12:02:16

date_2_2 = parser.parse(date2)
print(type(date_2_2)) # <class 'datetime.datetime'>
print(date_2_2) # 2024-01-01 12:02:16

date_3_3 = parser.parse(date3)
print(type(date_3_3)) # <class 'datetime.datetime'>
print(date_3_3) # 2024-01-01 12:02:16

date_4_4 = parser.parse(date4)
print(type(date_4_4)) # <class 'datetime.datetime'>
print(date_4_4) # 2024-01-01 14:02:16

# 定义两个时间戳日期
date_5_1 = 1704339094
date_5_2 = 1704791254
# 将时间戳转换为日期
time1 = datetime.fromtimestamp(date_5_1)
time2 = datetime.fromtimestamp(date_5_2)
print(time1)  # 2024-01-04 11:31:34
print(time2)  # 2024-01-09 17:07:34
在Python中,你可以使用 datetime.strptime() 和 parser.parse() 两种方法将字符串转换为日期格式。
datetime.strptime() 方法属于 datetime 模块,用于根据指定的格式将字符串解析为日期对象。
parser.parse() 方法属于 dateutil.parser 模块,它可以更灵活地解析各种日期字符串,因为它能够自动识别多种日期格式。
datetime.strptime() 需要显式指定日期格式,而 parser.parse() 则更灵活,能够处理多种日期字符串格式。选择使用哪种方法取决于你的需求和输入数据的多样性。
4. 获取当前时间戳(13位,毫秒)
from datetime import datetime
import time

# 1.使用 datetime 模块

# 获取当前时间
now_time = datetime.now()
# 转换为13位时间戳
timestamp = int(now_time.timestamp() * 1000)

print(now_time) # 2024-01-05 17:35:38.186429
print(timestamp) # 1704447338186


# 2.使用 time 模块

# 获取当前时间的时间戳
now_timestamp = time.time()
# 转换为13位时间戳
timestamp2 = int(now_timestamp * 1000)

print(now_timestamp) # 1704447338.1864295
print(timestamp2) # 1704447338186
1. 首先使用 datetime.now() 获取当前时间,然后通过 timestamp() 方法获取对应的UNIX时间戳(以秒为单位),最后乘以1000转换为13位时间戳。
2. 使用 time.time() 获取当前时间的时间戳(以秒为单位),然后乘以1000转换为13位时间戳。
5. 获取MST、EST、UTC、GMT 和 HST 不同的时区的时间
from datetime import datetime
from pytz import timezone

# 获取当前GMT时间
gmt_now = datetime.now(timezone('GMT'))
print(f"GMT时间: {gmt_now}") # GMT时间: 2024-01-05 09:54:22.042074+00:00

# 获取当前UTC时间
utc_now = datetime.now(timezone('UTC'))
print(f"UTC时间: {utc_now}") # UTC时间: 2024-01-05 09:54:22.042074+00:00

# 获取当前MST时间(夏令时结束)
mst_now = datetime.now(timezone('MST'))
print(f"MST时间: {mst_now}") # MST时间: 2024-01-05 02:54:22.042074-07:00

# 获取当前EST时间(夏令时开始)
est_now = datetime.now(timezone('EST'))
print(f"EST时间: {est_now}") # EST时间: 2024-01-05 04:54:22.042074-05:00

# 获取当前HST时间(夏威夷)
hst_now = datetime.now(timezone('HST'))
print(f"HST时间: {hst_now}") # HST时间: 2024-01-04 23:54:22.042074-10:00
1.MST (Mountain Standard Time):这是美国西部时区,通常是指从太平洋时间到山区时间之间的时区。它通常在早上和下午工作,因为它的夏令时是从3月第二个周日开始到11月第二个周日结束。
2.EST (Eastern Standard Time):这是美国东部时区,通常是指从太平洋时间到东部时间之间的时区。它通常在上午和下午工作,因为它的夏令时是从3月第二个周日开始到11月第一个周日结束。
3.UTC (Coordinated Universal Time):协调世界时,也称为国际原子时,是一种全球通用的时间标准。它基于地球自转的速度来定义,并且不受任何特定地点的影响。
4.GMT (Greenwich Mean Time):格林尼治标准时间,是英国的官方时间,也是UTC的前身。它是一种基于地球自转速度的时间标准,通常用于描述英国的时间。
5.HST (Hawaii Standard Time):夏威夷标准时间,是夏威夷和附近岛屿的时间。它比UTC快大约18个小时,因此在冬季时它通常是前一天的日期。
6. 获取日期是周几
from datetime import datetime
import calendar

date_string = "2024-01-06"
date = datetime.strptime(date_string, "%Y-%m-%d") # 将日期字符串转换为 datetime对象

# strftime() 日期格式化函数
print(date.strftime("%a")) # Sat
print(date.strftime("%A")) # Saturday

# weekday() 方法: 0~6 (0代表周一, 6代表周日)
weekday = date.weekday()
print(weekday) # 5

# 获取日期是一周中的哪一天(calendar.day_name是一个包含一周七天名称的列表)0~6
print(calendar.day_name[1]) # Tuesday
print(calendar.day_name[date.weekday()]) # Saturday

# isoweekday() 方法: 1~7 (1代表周一, 7代表周日)
isoweekday = date.isoweekday()
print(isoweekday) # 6

# 当天时间
today = datetime.now() # datetime.today()

print(today) # 2024-01-06 10:24:27.849871
print(today.strftime("%a")) # Sat
print(today.strftime("%A")) # Saturday
print(today.weekday()) # 5
print(calendar.day_name[today.weekday()]) # Saturday
print(today.isoweekday()) # 6
7. 计算两个日期的时间差
from datetime import datetime

# 使用datetime模块
# 定义两个日期
date_1_1 = datetime(2024, 1, 1, 10, 12, 12, )
date_1_2 = datetime(2024, 1, 8, 16, 55, 23, 520125)
diff_1 = date_1_2 - date_1_1

print(date_1_1)  # 2024-01-01 10:12:12
print(date_1_2)  # 2024-01-08 16:55:23.520125
print("时间差为: ", diff_1)  # 时间差为:  7 days, 6:43:11.520125
print(diff_1.days)  # 7
print(diff_1.seconds)  # 24191 : 不计算天数的秒,只计算小时分钟和秒的秒数 6:43:11
print(diff_1.microseconds)  # 520125 : 只计算毫秒
print(diff_1.__class__)  # <class 'datetime.timedelta'>

# 定义两个时间戳日期
date_2_1 = 1704339094
date_2_2 = 1704791254
# 将时间戳转换为日期
time1 = datetime.fromtimestamp(date_2_1)
time2 = datetime.fromtimestamp(date_2_2)
print(time1)  # 2024-01-04 11:31:34
print(time2)  # 2024-01-09 17:07:34
diff_2 = time2 - time1
print(diff_2)  # 5 days, 5:36:00
print(diff_2.days)  # 5

# 定义两个字符串日期
date_3_1 = "2024-01-02 12:22:03"
date_3_2 = "2024-01-08 03:12:43"
# 将字符串日期,转换为日期格式
time_3_1 = datetime.strptime(date_3_1, "%Y-%m-%d %H:%M:%S")
time_3_2 = datetime.strptime(date_3_2, "%Y-%m-%d %H:%M:%S")
print(time_3_1)  # 2024-01-02 12:22:03
print(time_3_2)  # 2024-01-08 03:12:43
diff_3 = time_3_2 - time_3_1
print(diff_3)  # 5 days, 14:50:40
print(diff_3.days)  # 5
# 将时间差转换成秒数
diff_3_s = diff_3.total_seconds()
print(diff_3_s)  # 485440.0
8. 日期加减n天,月,年等
from datetime import date, timedelta, datetime
from dateutil.relativedelta import relativedelta

# 获取当前日期
today = date.today()
print(today)  # 2024-01-11

# 使用datetime模块来进行日期的加减操作
# 加上n天
tomorrow = today + timedelta(days=1)
print(tomorrow)  # 2024-01-12

# 减去n天
yesterday = today - timedelta(days=1)
print(yesterday)  # 2024-01-10

# 对于更复杂的日期运算(如月份、年份等),也可以使用relativedelta函数
# 加上n天
next_day = today + relativedelta(days=1)
print(next_day)  # 2024-01-12

# 减去n天
last_day = today - relativedelta(days=1)
print(last_day)  # 2024-01-10

# 加上n月
next_month = today + relativedelta(months=1)
print(next_month)  # 2024-02-11

# 减去n月
last_month = today - relativedelta(months=1)
print(last_month)  # 2023-12-11

# 加上n年
next_year = today + relativedelta(years=1)
print(next_year)  # 2025-01-11

# 减去n年
last_year = today - relativedelta(years=1)
print(last_year)  # 2023-01-11

# 加上n周
next_week = today + relativedelta(weeks=1)
print(next_week)  # 2024-01-18

# 减去n周
last_week = today - relativedelta(weeks=1)
print(last_week)  # 2024-01-04

# 替换年月日
replace_today_y = today + relativedelta(year=2000)
replace_today_m = today + relativedelta(month=2)
replace_today_d = today + relativedelta(day=2)
replace_today = today + relativedelta(year=2000, month=2, day=2)

print(replace_today_y)  # 2000-01-11
print(replace_today_m)  # 2024-02-11
print(replace_today_d)  # 2024-01-02
print(replace_today)    # 2000-02-02

# 分钟加减
# 获取现在时间
now_time = datetime.now()
print(now_time)  # 2024-01-11 14:00:29.085170

# 加上n天
next_min1 = now_time + timedelta(minutes=20)
next_min2 = now_time + relativedelta(minutes=20)
print(next_min1)  # 2024-01-11 14:20:29.085170
print(next_min2)  # 2024-01-11 14:20:29.085170

# 减去n天
last_min1 = now_time - timedelta(minutes=20)
last_min2 = now_time - relativedelta(minutes=20)
print(last_min1)  # 2024-01-11 13:40:29.085170
print(last_min2)  # 2024-01-11 13:40:29.085170
9. 遍历两个日期间的所有日期
from datetime import datetime, timedelta

print("**************************")
# 遍历两个日期间的所有日期

# 定义两个日期
date1 = "2024-01-01"
date2 = "2024-01-08"
# 将字符串日期转换为日期对象
start_date = datetime.strptime(date1, "%Y-%m-%d")
end_date = datetime.strptime(date2, "%Y-%m-%d")
# 遍历日期并打印
current_date = start_date
while current_date <= end_date:
    print(current_date.strftime("%Y-%m-%d"))
    current_date += timedelta(days=1)

# 遍历list打印日期
date_list = [start_date + timedelta(days=i) for i in range(0, (end_date - start_date).days + 1)]

for date in date_list:
    print(date.strftime("%Y-%m-%d"))
2024-01-01
2024-01-02
2024-01-03
2024-01-04
2024-01-05
2024-01-06
2024-01-07
2024-01-08
10. 不同时区的时间互相转换
import pendulum

# 创建伦敦时间对象
london_time = pendulum.datetime(2024, 1, 9, 12, 0, 0, tz='Europe/London')
print("伦敦时间:", london_time)

# 转换成巴黎时间
paris_time = london_time.in_tz('Europe/Paris')
print("巴黎时间:", paris_time)

# 转换成东京时间
tokyo_time = london_time.in_tz('Asia/Tokyo')
print("东京时间:", tokyo_time)

# 转换成上海时间
shanghai_time = london_time.in_tz('Asia/Shanghai')
print("上海时间:", shanghai_time)

# 转换成莫斯科时间
moscow_time = london_time.in_tz('Europe/Moscow')
print("莫斯科时间:", moscow_time)

# 转换成印尼时间
indonesia_time = london_time.in_tz('Asia/Jakarta')
print("印尼时间:", indonesia_time)

# 转换成印度时间
india_time = london_time.in_tz('Asia/Kolkata')
print("印度时间:", india_time)
伦敦时间: 2024-01-09 12:00:00+00:00
巴黎时间: 2024-01-09 13:00:00+01:00
东京时间: 2024-01-09 21:00:00+09:00
上海时间: 2024-01-09 20:00:00+08:00
莫斯科时间: 2024-01-09 15:00:00+03:00
印尼时间: 2024-01-09 19:00:00+07:00
印度时间: 2024-01-09 17:30:00+05:30
11. 输入日期计算年龄(到今天)
from dateutil import parser
from datetime import date


def get_age():
    today = date.today()

    in_birthday = input("请输入您的出生年月日: ")

    try:
        birthday = parser.parse(in_birthday).date()
    except ValueError:
        print("您输入的日期有误!!!")
        return get_age()

    if birthday > today:
        print("您输入的日期有误!!!")
        return get_age()
    elif birthday.replace(year=today.year) > today:
        return today.year - birthday.year - 1
    else:
        return today.year - birthday.year


print("您的年龄是:", get_age(), "岁;")
**************************
请输入您的出生年月日: 2000 3 6
您的年龄是: 23;
**************************
请输入您的出生年月日: 1999-1-2
您的年龄是: 25;
**************************
请输入您的出生年月日: 2001 ,6 ,16
您的年龄是: 22;
**************************
请输入您的出生年月日: 1998 Jan 3
您的年龄是: 26;
**************************
请输入您的出生年月日: Jan 2000 8
您的年龄是: 24;
**************************
请输入您的出生年月日: 163546答复
您输入的日期有误!!!
请输入您的出生年月日: 2033-01-06
您输入的日期有误!!!
请输入您的出生年月日: 2003-18-06
您输入的日期有误!!!
请输入您的出生年月日: 2003-01-06
您的年龄是: 21;
**************************
12. 计算该年该月的第几个星期几的日期
import datetime


# 获取该年该月的第几个星期几的日期
def get_weekday_of_month(year, month, week_number, weekday):
    # 获取该月第一天的日期
    first_day = datetime.date(year, month, 1)

    # 计算第一个星期几, 在该月的第几天 (weekday(): 0-6; 0表示周一, 所以计算周时减1, 计算第几天时 加1)
    first_weekday = (weekday - 1 - first_day.weekday() + 7) % 7 + 1

    # 计算该年该月的第几个星期几所在的日期
    date = first_day + datetime.timedelta(days=(week_number - 1) * 7 + first_weekday - 1)
    return date


# 例如:计算2024年的感恩节是哪一天(2024年第4个周四)
print(get_weekday_of_month(2024, 11, 4, 4))
# 2024-11-28
end
文章来源:https://blog.csdn.net/Taerge0110/article/details/135528148
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。