0
点赞
收藏
分享

微信扫一扫

python 时间与日期模块总结

python标准库中关于日期和时间的库主要有三个:calendartimedatetime

1.calemdar模块

calendar模块在日历的获取、显示以及年份是否为闰年等方面有诸多函数支持

1.1打印日历

import calendar
# 输出2022年9月份的日历
print(calendar.month(2022, 9))
  • 输出结果
   September 2022
Mo Tu We Th Fr Sa Su
          1  2  3  4
 5  6  7  8  9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30

1.2 判断是否为闰年

# 判断是否为闰年
calendar.isleap(2022)
  • 输出结果
False

2.time 模块

time主要功能体现在时间计算、处理以及显示格式上

2.1显示当前时间

  1. 使用time( )方法可以返回字1970年1月1日起0时0分0秒为计时器点的时间戳
# 返回当前时间戳
time.time()
  • 输出结果
1664183018.168783
  1. 如果想要获取年月日形式的时间,则可以采用localtime( )asctime( )ctime( )方法来实现
  • 三者的比较
方法名 参数 返回结果
localtime() 时间戳 时间元组形式
ctime() 时间戳 字符串形式
asctime() 时间元组 字符串形式
  • 实例
t1 = time.localtime(2022)
print(t1)

time.ctime(2022)

time.asctime(t1)
  • 输出结果
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=33, tm_sec=42, tm_wday=3, tm_yday=1, tm_isdst=0)

'Thu Jan  1 08:33:42 1970'

'Thu Jan  1 08:33:42 1970'
  1. 补充

localtime()函数返回值为时间元组,struct_time元组为时间元组,将诸多时间相关属性存储成元组的形式。

struct_time元组有9个属性元素,9个元素代表的意义如下表所示。

元素下标值 属性 含义
tm_year 年(四位数形式) 2022
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 一周中的第几天 0~6(0代表一周)
7 tm_yday 一年中的第几天 0~366
8 tm_isdst 夏令时 -1,0或1

2.2字符与时间的转换

时间数据在文件中一般保存成字符串形式,如“12/02/2016”,通过 time模块中的strftime()方法和strptime()方法可实现时间的字符串形式与时间元组形式互相转换。

两个函数的参数形式如下:

# strptime函数将特定形式的字符串形式转换成时间元组
time.strptime(string[, format])

# strftine()函致将时间元组转换成特定形式的时间元组
time.strftime(format [, t])
  • 举个例子
from time import strftime, strptime

t1 = strptime("22/09/2021", "%d/%m/%Y")
print(t1)

strftime("%d %b %y", t1)
  • 输出结果
time.struct_time(tm_year=2021, tm_mon=9, tm_mday=22, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=265, tm_isdst=-1)

'22 Sep 21' 

上述代码中," $%d/%m/%Y$ " 表示的是时间格式,具体含义可参照下表:

符号格式 含义 取值(字符格式)
$%y$ 略去世纪的两位十进制数年份 取值为00~ 99(如“16”)
$%Y$ 完全形式的年份 如“2016”
$%m$ 返回月份值 取值为01~12(如“02")
$%b$ 本地简化月份名称 月份简写的英文名称(如“Feb")
$%B$ 本地全部月份名称 月份英文名称(如“February")
$%d$ 每个月天数的十进制形式 取值为01~31(比如,02代表2日)
$%a$ 本地简化星期名称 如“Sat”
$%A$ 本地完整星期名称 如“Saturday”
$%w$ 十进制数字表示星期 取值0~6,0表示星期天
$%W$ 一年中的星期数 取值00~53,星期一为星期的开始;在新年第一个星期一之前的所有天数都视为00周
$%U$ 一年中的星期数 取值00 ~53,星期天为星期的开始;在新年第一个星期天之前的所有天数都视为00周
$%H$ 二十四小时制时间 取值为00~ 23
$%I$ 十二小时制时间 取值为01~ 12
$%M$ 分钟 取值为00~59
$%S$ 取值为00~61(考虑到闰秒的情况)

3.datetime模块

datetime模块的作用和time模块十分相似,经常用于一些转换和运算操作

3.1获取当前时间

from datetime import datetime
now = datetime.now()
now
  • 输出结果
datetime.datetime(2022, 9, 26, 21, 56, 17, 575501)

3.2进行时间的加减

datetime对象进行减法运算后会返回一个timedelta对象,表示一个时间段

delta = datetime(2022, 9, 10) - datetime(2022, 9, 1)
delta
  • 输出结果
datetime.timedelta(days=9)

3.3字符串与日期的转换

同样的,datetime中也有strftimestrptime用作字符串和日期之间的转换

  • 举个例子
now = datetime.now()
datetime.strftime(now, "%d/%m/%Y")

datetime.strptime("2022-09-23", "%Y-%m-%d")
  • 输出结果
'26/09/2022'

datetime.datetime(2022, 9, 23, 0, 0)

==如果认为设置“ $%d/%m/%Y$ ”这种日期格式十分麻烦,可以使用deteutil的第三方包paser.pars()函数实现自动转移,它能够解析几乎任何格式(当然也可能会带来一些麻烦,如:parse("10"))==

  • 举个栗子
from dateutil.parser import parse
parse("23-09-2022", dayfirst=True)

parse("23-09-2022")

parse("10")  # 会默认为当月的10号进行解析
  • 输出结果
datetime.datetime(2022, 9, 23, 0, 0)

datetime.datetime(2022, 9, 23, 0, 0)

datetime.datetime(2022, 9, 10, 0, 0)
举报

相关推荐

0 条评论