layout: posttitle: Python时间和日期操作
subtitle: datetime Arrow
date: 2019-12-18
author: NSX
header-img: img/post-bg-ios9-web.jpg
catalog: true
tags:
- 技术
- Python
- 教程

Python时间和日期操作

Python中,对日期和时间的操作,主要使用这3个内置模块: datetime 、 time 和 calendar

导入需要的包

  1. import arrow
  2. import time, calendar
  3. from datetime import datetime

获取当前时间

  1. str(datetime.now())

获取两个代码位置在执行时的时间差

  1. before = time.time()
  2. func1()
  3. after = time.time()
  4. print(f’调用func1,花费时间{before-after}’)

格式化日期(指定输出的时间格式)

  1. dayTime=('2018-01-14 12:00:00'
  2. dayTime1= datetime.strptime(dayTime,'%Y-%m-%d %a %H:%M:%S').strftime("%w")
  3. dayTime2= datetime.datetime(2018,1,14).strftime("%w")
  4. # 格式化成2016-03-20 11:45:39形式
  5. print time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
  6. # 格式化成Sat Mar 28 22:24:24 2016形式
  7. print time.strftime("%a %b %d %H:%M:%S %Y", time.localtime())

数字表示的时间转化为字符串表示

  1. time.strftime('%Y%m%d %H:%M:%S',time.localtime(1434502529))

获得指定时间字符串对应星期几

  1. thatDay = "2018-6-24"
  2. week = datetime.strptime(thatDay,'%Y-%m-%d').strftime("%w")
  3. # week= datetime.datetime(2018,6,24).strftime("%w")

Arrow 介绍

arrow是一个提供了更易懂和友好的方法来创建、操作、格式化和转化日期、时间和时间戳的python库。可以完全替代datetime,支持python2和3

基本使用

以当前时间获取arrow对象

  1. import arrow
  2. >>> cur = arrow.now()
  3. >>> cur
  4. <Arrow [2017-02-04T13:47:58.114342+08:00]>
  5. >>> cur.timestamp
  6. >>> cur.year
  7. >>> cur.month
  8. >>> cur.day
  9. >>> cur.hour
  10. >>> cur.minute
  11. >>> cur.second
  12. >>> cur.week

以指定时间戳获取arrow对象

  1. >>> arrow.get('1586782011')
  2. <Arrow [2020-04-13T12:46:51+00:00]>
  3. >>> arrow.get('2017-01-05')
  4. <Arrow [2017-01-05T00:00:00+00:00]>
  5. >>> arrow.get('2017.01.05')
  6. <Arrow [2017-01-05T00:00:00+00:00]>
  7. >>> arrow.get('2017/01/05')
  8. <Arrow [2017-01-05T00:00:00+00:00]>

时间的计算和移动shift

  1. >>> utc.replace(days=1) # 设置日等于1号
  2. >>> utc.replace(hours=2) # 设置hour等于2点,取值为0-23
  3. >>> utc.replace(weeks=1) #
  4. >>> utc.shift(days=+1) # 1天之后
  5. >>> utc.shift(hours=-2) # 2小时之前
  6. >>> cur.shift(years=1) # 明年

PS:注意hourhours的区别,前者是设置时间,后者是在原来时间的基础上加减

数据运算

Arrow对象可以通过简单的大于小于符合来判断时间先后,如:

  1. >>> start = arrow.get('2017-02-03T15:47:58.114342+02:00')
  2. >>> end = arrow.get('2017-02-02T07:17:41.756144+02:00')
  3. >>> start
  4. <Arrow [2017-02-03T15:47:58.114342+02:00]>
  5. >>> end
  6. <Arrow [2017-02-02T07:17:41.756144+02:00]>
  7. >>> start > end
  8. True
  9. >>> start_to = start.to('+08:00')
  10. >>> start == start_to
  11. True

也可以通过’-‘运算符来获得时间的差值,如:

  1. >>> start - end
  2. datetime.timedelta(1, 30616, 358198)

转换为指定时间格式

  1. arrow.now().format('YYYY-MM-DD HH:mm:ss ZZ')

附录: 时间格式说明

  1. %a 星期几的简写 Weekday name, abbr.
  2. %A 星期几的全称 Weekday name, full
  3. %w 星期(0-6),星期天为星期的开始
  4. %W 一年中的星期数(00-53)星期一为星期的开始
  5. %b 月分的简写 Month name, abbr.
  6. %B 月份的全称 Month name, full
  7. %c 本地相应的日期表示和时间表示
  8. %x 本地相应的日期表示 (e.g. 13/01/08)
  9. %X 本地相应的时间表示 (e.g. 17:02:10)
  10. %H 24小时制的小时 Hour (24-hour clock)
  11. %M 十时制表示的分钟数 Minute number
  12. %S 十进制的秒数 Second number

参考

Python 中的时间和日期操作

python 判断日期是星期几

Python 日期和时间

arrow时间库使用详解