python中datetime的常用操作

Posted 归去_来兮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python中datetime的常用操作相关的知识,希望对你有一定的参考价值。

datetime是用于处理日期和时间的模块,一些常用的操作可通过提供的基本函数实现。引入模块——import datetime

1.datetime转字符串——strftime()函数

有两种写法:
datetime.datetime.strftime(datatime对象,格式化的字符串)

datatime对象.strftime(格式化的字符串)
:若格式化的字符串中含中文,需使用format方式表示。

myTime = datetime.datetime.now()  # 获取系统当前时间

strTime1 = datetime.datetime.strftime(myTime, \'%Y-%m-%d %H:%M:%S\')
strTime2 = datetime.datetime.strftime(myTime, \'%Y-%m-%d %H:%M\')
strTime3 = datetime.datetime.strftime(myTime, \'%Y-%m-%d\')
strTime4 = datetime.datetime.strftime(myTime, "%Y{}%m{}%d{} %H{}%M{}%S{}").format(\'年\', \'月\', \'日\', \'时\', \'分\', \'秒\')

\'\'\'
或
strTime1 = myTime.strftime(\'%Y-%m-%d %H:%M:%S\')
strTime2 = myTime.strftime(\'%Y-%m-%d %H:%M\')
strTime3 = myTime.strftime(\'%Y-%m-%d\')
strTime4 = myTime.strftime(\'%Y{}%m{}%d{} %H{}%M{}%S{}\').format(\'年\', \'月\', \'日\', \'时\', \'分\', \'秒\')
\'\'\'


2.字符串转datetime——strptime()函数

写法为:datetime.datetime.strptime(时间字符串, 格式化的字符串)

str_time_1 = "2021-11-02 13:50:03"
myDateTime1 = datetime.datetime.strptime(str_time_1, "%Y-%m-%d %H:%M:%S")

str_time_2 = "2022-11-02 13:50"
myDateTime2 = datetime.datetime.strptime(str_time_2, "%Y-%m-%d %H:%M")

str_time_3 = "2023-11-02"
myDateTime3 = datetime.datetime.strptime(str_time_3, "%Y-%m-%d")

str_time_4 = "2024年11月02日 13时50分03秒"
myDateTime4 = datetime.datetime.strptime(str_time_4, "%Y年%m月%d日 %H时%M分%S秒")


3.时间差操作——timedelta()

可加入的参数:
weeks=0 周数,数字1表示七天;
days=0 天数;
hours=0 小时数;
minutes=0 分钟数;
seconds=0 秒数;
milliseconds=0 毫秒数,千分之一秒;
microseconds=0 微秒数;百万分之一秒.

myDateTime = datetime.datetime.now()
newDateTime = myDateTime + datetime.timedelta(days=1, hours=1, minutes=1)
myDelta = newDateTime - myDateTime


4.时间戳操作

myDateTime = datetime.datetime.now()

# 获取datetime对象的时间戳
myTimeStamp = myDateTime.timestamp()

# 由时间戳初始化datetime对象
newDateTime = datetime.datetime.fromtimestamp(myTimeStamp)



附:时间日期的格式化参数
%a 星期几的简写
%A 星期几的全称
%b 月分的简写
%B 月份的全称
%c 标准的日期的时间串
%C 年份的后两位数字
%d 十进制表示的每月的第几天
%D 月/天/年
%e 在两字符域中,十进制表示的每月的第几天
%F 年-月-日
%g 年份的后两位数字,使用基于周的年
%G 年分,使用基于周的年
%h 简写的月份名
%H 24小时制的小时
%I 12小时制的小时
%j 十进制表示的每年的第几天
%m 十进制表示的月份
%M 十时制表示的分钟数
%n 新行符
%p 本地的AM或PM的等价显示
%r 12小时的时间
%R 显示小时和分钟:hh:mm
%S 十进制的秒数
%t 水平制表符
%T 显示时分秒:hh:mm:ss
%u 每周的第几天,星期一为第一天 (值从0到6,星期一为0)
%U 第年的第几周,把星期日做为第一天(值从0到53)
%V 每年的第几周,使用基于周的年
%w 十进制表示的星期几(值从0到6,星期天为0)
%W 每年的第几周,把星期一做为第一天(值从0到53)
%x 标准的日期串
%X 标准的时间串
%y 不带世纪的十进制年份(值从0到99)
%Y 带世纪部分的十制年份
%z,%Z 时区名称,如果不能得到时区名称则返回空字符。
%% 百分号


参考

  1. https://www.cnblogs.com/xiaoxiaoweng/p/10966220.html

Python中time模块和datetime模块的常用操作以及几种常用时间格式间的转换

最常见以及常用的几种时间格式

   1、时间戳(timestamp),时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。

   2、时间元组(struct_time),共有九个元素组。

   3、格式化时间(format time ),可以格式化为固定或者自定义格式,增加可读性。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import time
#时间戳格式,默认获取当前时间 1500029143.7640195
timestamp = time.time()
print("获取当前时间戳:",timestamp)


#获取元组(struct_time)的形式,默认获取当前时间
struct_time_UTC8= time.localtime()
print("获取当前东8区(中国)的时间:",struct_time_UTC8)
struct_time_UTC= time.gmtime()
print("获取当前的世界时间:",struct_time_UTC)
‘‘‘注意:
UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间。
在中国为UTC+8。DST(Daylight Saving Time)即夏令时
‘‘‘

#获取格式化后的时间,即将时间格式化为%Y-%m-%d %H:%M:%S格式的字符串
format_time = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
print("按照指定格式格式化后的时间:",format_time)

#  Fri Jul 14 18:45:43 2017(%a %b %d %H:%M:%S %Y)格式
#将时间戳格式的时间转化成%a %b %d %H:%M:%S %Y格式,默认是将当前时间格式化
style_time1 = time.ctime()
print("将时间戳转化成%a %b %d %H:%M:%S %Y格式:",style_time1)
#将元组(struct_time)形式的时间转换成%a %b %d %H:%M:%S %Y格式,默认也是将当前时间格式化
style_time2 = time.asctime()
print("将类似于元组(struct_time)转换成%a %b %d %H:%M:%S %Y格式:",style_time2)


‘‘‘运行结果
获取当前时间戳: 1500029371.4988112
获取当前东8区(中国)的时间: time.struct_time(tm_year=2017, tm_mon=7, tm_mday=14, tm_hour=18, tm_min=49, tm_sec=31, tm_wday=4, tm_yday=195, tm_isdst=0)
获取当前的世界时间: time.struct_time(tm_year=2017, tm_mon=7, tm_mday=14, tm_hour=10, tm_min=49, tm_sec=31, tm_wday=4, tm_yday=195, tm_isdst=0)
按照指定格式格式化后的时间: 2017-07-14 18:49:31
将时间戳转化成%a %b %d %H:%M:%S %Y格式: Fri Jul 14 18:49:31 2017
将类似于元组(struct_time)转换成%a %b %d %H:%M:%S %Y格式: Fri Jul 14 18:49:31 2017
‘‘‘

一些基本概念

  1.时间戳(timestamp)的形式:通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。返回时间戳方式的函数主要有time(),clock()等,默认是返回当前时间的时间戳。

  2.元组(struct_time)的形式:struct_time元组共有9个元素。返回struct_time的函数主要有gmtime(),localtime(),strptime(),默认是返回当前时间的元组   (struct_time)形式,但也可以将其它时间段或者其它形式的时间格式转换为元组(struct_time)形式。

  struct_time元组9个元素详细说明:

‘‘‘
0   tm_year(年)  比如2011
1   tm_mon(月)   1 - 12
2   tm_mday(日)  1 - 31
3   tm_hour(时)  0 - 23
4   tm_min(分)   0 - 59
5   tm_sec(秒)   0 - 61
6   tm_wday(weekday)    0 - 6(0表示周日)
7   tm_yday(一年中的第几天)    1 - 366
8   tm_isdst(是否是夏令时)    默认为-1
‘‘‘

几种时间格式的转换

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import time
#将一个时间戳转化为一个元组(struct_time)形式的时间格式:
tuple_struct = time.localtime(1499703018.0)
print("将一个时间戳转化为一个类似元组形式的时间格式:",tuple_struct)   #将一个时间戳转化为一个类似元组形式的时间格式: time.struct_time(tm_year=1973, tm_mon=11, tm_mday=30, tm_hour=5, tm_min=33, tm_sec=9, tm_wday=4, tm_yday=334, tm_isdst=0)
#将元组(struct_time)形式的时间格式转化为时间戳:
t = (2017, 7, 11, 0, 10, 18, 1, 192, 0)
timestamp1 = time.mktime(time.struct_time(t))
print("将类似于元组形式的时间格式转化为时间戳:",timestamp1)

#将元组(struct_time)形式的时间格式转化为指定的格式如:%Y-%m-%d %H:%M:%S
format_time1 = time.strftime("%Y-%m-%d %H:%M:%S",t)  #2017-07-11 00:10:18
print("将类似于元素形式的时间格式转化为指定的格式如:%Y-%m-%d %H:%M:%S:",format_time1)

#将格式化后的时间转化成元组(struct_time)形式的时间格式
tuple_struct2 = time.strptime("2017-07-11 00:10:18","%Y-%m-%d %H:%M:%S")
print("将格式化后的时间转化成元组形式的时间格式:",tuple_struct2)
‘‘‘运行结果
将一个时间戳转化为一个类似元组形式的时间格式: time.struct_time(tm_year=2017, tm_mon=7, tm_mday=11, tm_hour=0, tm_min=10, tm_sec=18, tm_wday=1, tm_yday=192, tm_isdst=0)
将类似于元组形式的时间格式转化为时间戳: 1499703018.0
将类似于元素形式的时间格式转化为指定的格式如:%Y-%m-%d %H:%M:%S: 2017-07-11 00:10:18
将格式化后的时间转化成元组形式的时间格式: time.struct_time(tm_year=2017, tm_mon=7, tm_mday=11, tm_hour=0, tm_min=10, tm_sec=18, tm_wday=1, tm_yday=192, tm_isdst=-1)
‘‘‘

为了方便理解和记忆这几种常用时间格式的转化,请看下边的图:

技术分享

时间格式化时的参考帮助信息

‘‘‘时间格式化时的参考帮助信息:
%a  本地(locale)简化星期名称    
%A  本地完整星期名称    
%b  本地简化月份名称    
%B  本地完整月份名称    
%c  本地相应的日期和时间表示    
%d  一个月中的第几天(01 - 31)   
%H  一天中的第几个小时(24小时制,00 - 23)    
%I  第几个小时(12小时制,01 - 12)    
%j  一年中的第几天(001 - 366)  
%m  月份(01 - 12) 
%M  分钟数(00 - 59)    
%p  本地am或者pm的相应符    
%S  秒(01 - 61)  
%U  一年中的星期数。(00 - 53星期天是一个星期的开始。)第一个星期天之前的所有天数都放在第0周。   
%w  一个星期中的第几天(0 - 6,0是星期天)  三
%W  和%U基本相同,不同的是%W以星期一为一个星期的开始。 
%x  本地相应日期  
%X  本地相应时间  
%y  去掉世纪的年份(00 - 99)    
%Y  完整的年份   
%Z  时区的名字(如果不存在为空字符)    
%%  ‘%‘字符
‘‘‘

######################################################

datetime模块重新封装了time模块,提供了更多的类如:date、time、datetime、timedelta等。

  1.datetim.data的常见用法示例

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import datetime
# 获得一个date对象
d = datetime.date(2017,7,14)   #参数年、月、日

#data能表示的最大日期
d_max = d.max
print("data能表示的最大日期:",d_max)

#data能表示的最小日期
d_min = d.min
print("data能表示的最大日期:",d.min)

#获取当前日期
d_today = d.today()
print("获取当前日期:",d.today())

#获取年、月、日
year = d.year
month = d.month
day = d.day
print("获取年%s、月%s、日%s"% (year,month,day))

#根据给定的时间戳返回对应的日期
d_date = d.fromtimestamp(12312432432)
print("根据给定的时间戳返回对应的日期:",d_date)

#返回weekday,如果星期一则返回0,星期二返回1,以此类推,2017-7-14是星期五
d_weekday = d.weekday()
print("返回weekday为:",d_weekday)

#返回格式化为(YYYY-MM-DD)的字符串
d_format = d.isoformat()
print("返回格式化(YYYY-MM-DD)的字符串:",d_format)

#返回格式化的日期字符串类似time模块的strftime
d_strftime = d.strftime("%Y-%m-%d %H:%M:%S")
print("格式化后的字符串:",d_strftime)

#返回时间的元组(struct_time)形式
d_tuple = d.timetuple()
print("返回时间的元组(struct_time)形式:",d_tuple)

‘‘‘运行结果
data能表示的最大日期: 9999-12-31
data能表示的最大日期: 0001-01-01
获取当前日期: 2017-07-14
获取年2017、月7、日14
根据给定的时间戳返回对应的日期: 2360-03-02
返回weekday为: 4
返回格式化(YYYY-MM-DD)的字符串: 2017-07-14
格式化后的字符串: 2017-07-14 00:00:00
返回时间的元组(struct_time)形式: time.struct_time(tm_year=2017, tm_mon=7, tm_mday=14, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=195, tm_isdst=-1)
‘‘‘

  2.datetime.time的常见用法示例

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import datetime
dt = datetime.time(17,30,00)   #参数时、分、秒
#time能表示的最大时间
dt_max = dt.max
print("能表示的最大时间:",dt_max)

#time能表示的最小时间
dt_min = dt.min
print("能表示的最小时间:",dt_min)

#获取时、分、秒、微妙
hour = dt.hour
minute = dt.minute
second = dt.second
microsecond = dt.microsecond
print("获取时%s、分%s、秒%s、微妙%s"% (hour,minute,second,microsecond))

#返回时间的格式化字符串(HH:MM:SS)
dt_format = dt.isoformat()
print("返回时间的格式化字符串(HH:MM:SS):",dt_format)

#格式化,类似于time模块的strftime
dt_strftime = dt.strftime("%H:%M:%S")
print("格式化:",dt_strftime)
‘‘‘运行结果
能表示的最大时间: 23:59:59.999999
能表示的最小时间: 00:00:00
获取时17、分30、秒0、微妙0
返回时间的格式化字符串(HH:MM:SS): 17:30:00
格式化: 17:30:00
‘‘‘

  3.datetime.datetime的常见用法示例

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import datetime
#获得当前的本地时间
d_today = datetime.datetime.today()
print("获得当前的本地时间:",d_today)

#获得当前时间,如果提供了时区参数tz,则根据时区参数获取指定时区的时间
d_now = datetime.datetime.now()
print("获得当前时间:",d_now)

#获取当前的世界标准时间(即格林威治天文时间)
d_utc = datetime.datetime.utcnow()
print("获取当前的世界标准时间(即格林威治天文时间):",d_utc)

#将时间戳转化成格式化的字符串,可以时区参数tz转成指定时区的格式化时间
d_fromtimestamp = datetime.datetime.fromtimestamp(123214324)
print("将时间戳转化成格式化的字符串:",d_fromtimestamp)

#根据时间戳以utc标准时区时间来进行格式化
d_utcfromtimestam = datetime.datetime.utcfromtimestamp(123214324)
print("将时间戳以utc标准时区时间来转化成格式化的字符串:",d_utcfromtimestam)
‘‘‘注意通过上边输出结果的比较我们会发现通过fromtimestamp和utcfromtimestamp转化统一时间戳得到的
时间正好差了8h
‘‘‘

##################
dd = datetime.datetime(2017,7,14,17,30,00)
#将指定的时间转化成格式化的字符串,类似于time的strftime
dd_strftime = dd.strftime("%Y-%m-%d %H:%M:%S")
print("将指定的时间进行格式化",dd_strftime)

#返回weekday,如果星期一则返回0,星期二返回1,以此类推,2017-7-14是星期五
dd_weekday = dd.weekday()
print("返回weekday为:",dd_weekday)

#获得元组(struct_time)形式的时间格式
dd_timetuple = dd.timetuple()
print("获得元组(struct_time)形式的时间格式:",dd_timetuple)
#dd_utctimetuple = dd.utctimetuple()  #以utc标准获取

#返回一个格式化为%Y-%m-%d %H:%M:%S格式的字符串
dd_isoformat = dd.isoformat()
print("返回一个格式化为%Y-%m-%d %H:%M:%S格式的字符串:",dd_isoformat)
‘‘‘运行结果
获得当前的本地时间: 2017-07-14 18:57:59.309859
获得当前时间: 2017-07-14 18:57:59.309858
获取当前的世界标准时间(即格林威治天文时间): 2017-07-14 10:57:59.309858
将时间戳转化成格式化的字符串: 1973-11-27 10:12:04
将时间戳以utc标准时区时间来转化成格式化的字符串: 1973-11-27 02:12:04
将指定的时间进行格式化 2017-07-14 17:30:00
返回weekday为: 4
获得元组(struct_time)形式的时间格式: time.struct_time(tm_year=2017, tm_mon=7, tm_mday=14, tm_hour=17, tm_min=30, tm_sec=0, tm_wday=4, tm_yday=195, tm_isdst=-1)
返回一个格式化为%Y-%m-%d %H:%M:%S格式的字符串: 2017-07-14T17:30:00
‘‘‘

   4.datetime.timedelta的常见用法示例

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Yaosheng Wang
import datetime
#获取当前时间
now_date = datetime.datetime.now()
print("获取当前时间:",now_date)
#获取五天后的时间
five_later = datetime.datetime.now() + datetime.timedelta(5)
print("获取五天后的时间:",five_later)

#获取五天前的时间
five_ago = datetime.datetime.now() - datetime.timedelta(5)
print("获取五天前的时间:",five_ago)

#获的三个小时后的时间
three_hour_later = datetime.datetime.now() + datetime.timedelta(hours=3)
print("获的三个小时后的时间:",three_hour_later)
‘‘‘运行结果
获取当前时间: 2017-07-14 19:00:04.955596
获取五天后的时间: 2017-07-19 19:00:04.955596
获取五天前的时间: 2017-07-09 19:00:04.955596
获的三个小时后的时间: 2017-07-14 22:00:04.955596
‘‘‘


以上是关于python中datetime的常用操作的主要内容,如果未能解决你的问题,请参考以下文章

学习笔记:python3,代码片段(2017)

Python中time模块和datetime模块的常用操作以及几种常用时间格式间的转换

常用python日期日志获取内容循环的代码片段

python:datetime类常用内容

python常用模块:

Python标准库datetime之date模块详解