Python如何进行时间处理


Posted in Python onAugust 06, 2020

我们会经常遇到对时间的处理,用python来进行时间处理简直不要太方便了,这一期就给大家介绍一下python的时间处理!

用python进行时间处理主要会用到time,calendar,datetime及pandas这几个库,其中又以后两个最为常用。

这一期我们主要介绍一下用datetime库进行时间处理的常用操作。

1. datetime基础

1.1 获取当前时间

import time
import datetime as dtm

## 用datetime获取当前时间
dtime = dtm.datetime.now() # dtm.datetime.utcnow()  
dtime
# datetime.datetime(2018, 12, 15, 13, 1, 30, 200649) # 年、月、日、时、分、秒、微秒

dtime.year, dtime.month, dtime.day
# (2018, 12, 15)

dtm.datetime.strftime(dtm.datetime.now(), '%Y-%m-%d %H:%M:%S')
# '2018-12-15 20:47:45'

# 用time库获取当前时间:
time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time( )))
# '2018-12-15 20:49:17'
time.strftime("%Y-%m-%d %H:%M:%S") 
# '2018-12-15 20:50:11'

1.2 datetime基本操作

from datetime import datetime, date, time
# Using datetime.combine()
d = date(2005, 7, 14)
t = time(12, 30)
datetime.combine(d, t)
datetime(2005, 7, 14, 12, 30)

# datetime 类的方法:
datetime.date()
datetime.time()
# 可以用str()直接将时间格式转化为字符串

dt = datetime(2005, 7, 14, 12, 30)
# datetime(%Y,%m,%d,%H,%M,%S): 
# datetime共有6个参数,分别代表的是年月日时分秒。其中年月日是必须要传入的参数,时分秒可以不传入,默认全为零。

# >>> # Using datetime.timetuple() to get tuple of all attributes
tt = dt.timetuple()
for it in tt:  
   print(it)

# 2005  # year
# 7   # month
# 14   # day
# 12   # hour
# 30   # minute
# 0    # second
# 3    # weekday (0 = Monday, 6 = Sunday)
# 195   # number of days since 1st January
# -1   # dst - method tzinfo.dst() returned None

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

# 返回今天是周几
x='2018-05-27'
int(dtm.datetime(int(x[ :4]),int(x[5:7]),int(x[8: ])).strftime('%w'))
# 0 表示周日
dtm.datetime(2017, 1, 1).strftime("%w")   # 0-6 SUN-SAT

2. 时间戳的转换

Unix时间戳:  Unix 中常常使用一个数字记录时间,表示距离起始时间相差的秒数(根据系统的精度,时间单位有时毫秒,有时是纳秒)。大于 0 表示在起始时间之后,小于 0 就表示在起始时间之前。这个数字有时是浮点类型、有时是整数类型,但都称这个数字为 Unix 时间戳(Timestamp)

import time
import datetime as dtm

## 获取当前时间
dtime = dtm.datetime.now() # dtm.datetime.utcnow()  

# 时间戳
ans_time = int(time.mktime(dtime.timetuple()))
ans_time
# 1535860540

# 时间戳的转换-1
t1 = datetime.datetime.fromtimestamp(ans_time) # local time
t1
# datetime.datetime(2018, 9, 2, 11, 55, 40)
# 也可以用time模块的localtime()方法: time.localtime(ans_time)

# 时间戳的转换-2
t2 = datetime.datetime.utcfromtimestamp(ans_time) # utc time
t2
# datetime.datetime(2018, 9, 2, 3, 55, 40)
t2.strftime("%Y--%m--%d %H:%M:%S")
# 2018--09--02 03:55:40

# 时间戳的转换-3
pd.to_datetime(ans_time,unit='s') # utc time
# Timestamp('2018-09-02 03:55:40')

3. 时间格式的转换

  • strftime 即 string format time,用来将时间格式化成字符串
  • strptime 即 string parse time,用来将字符串解析成时间
import datetime as dtm
start = dtm.datetime(2011,1,7,1,21,1) 
# datetime.datetime(2011, 1, 7, 1, 21, 1)

start.strftime('%Y-%m-%d %H:%M:%S')
# '2011-01-07 01:21:01'

dtm.datetime.strptime('2011-01-07 01:21:01','%Y-%m-%d %H:%M:%S')
# datetime.datetime(2011, 1, 7, 1, 21, 1)
str(start)
# '2011-01-07 01:21:01'
start.strftime("%Y-%m-%d 00:00:00")
# '2011-01-07 00:00:00'


# The strftime method formats a datetime as a string: 
In [1]: dt.strftime('%m/%d/%Y %H:%M')
Out[1]: '10/29/2011 20:30'
# Strings can be converted (parsed) into datetime objects using the strptime function: 
In [2]: dtm.datetime.strptime('20091031', '%Y%m%d')
Out[2]: datetime.datetime(2009, 10, 31, 0, 0)

>>> z
dtm.datetime(2012, 9, 23, 21, 37, 4, 177393)
>>> nice_z = dtm.datetime.strftime(z, '%A %B %d, %Y')
>>> nice_z
'Sunday September 23, 2012'

# 字符串形式的时间格式转化为时间格式
dt = dtm.datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M")
# 时间格式转化为字符串
# time.strftime( '%Y-%m-%d' , time.localtime(time.time()))

# >>> # Formatting datetime
print(dt.strftime("%A, %d. %B %Y %I:%M%p"))
# 'Tuesday, 21. November 2006 04:30PM'
'The {1} is {0:%d}, the {2} is {0:%B}, the {3} is {0:%I:%M%p}.'.format(dt, "day", "month", "time")
# 'The day is 21, the month is November, the time is 04:30PM.'

'''
Datetime format specification:

%Y Four-digit year
%y Two-digit year
%m Two-digit month [01, 12] 
%d Two-digit day [01, 31]
%H Hour (24-hour clock) [00, 23]
%I Hour (12-hour clock) [01, 12]
%M Two-digit minute [00, 59]
%S Second [00, 61] (seconds 60, 61 account for leap seconds) 
%w Weekday as integer [0 (Sunday), 6]

datetime.strptime解析时间需要输入相应的时间格式,而dateutil第三方库中的parser.parse方法则更加灵活。

dateutil.parser 有时候也会有一定的麻烦,比如 '42'会被解析为2042 年加上今天的日期:datetime.datetime(2042, 9, 1, 0, 0)

from dateutil.parser import parse
parse('2011-01-03') # datetime.datetime(2011, 1, 3, 0, 0)
parse('Jan 31, 1997 10:45 PM') # datetime.datetime(1997, 1, 31, 22, 45)
parse('6/12/2011', dayfirst=True) # datetime.datetime(2011, 12, 6, 0, 0)

# pandas:
datestrs = ['2011-07-06 12:00:00', '2011-08-06 00:00:00']
pd.to_datetime(datestrs)
# DatetimeIndex(['2011-07-06 12:00:00', '2011-08-06 00:00:00'], dtype='datetime64[ns]', freq=None)

4. Timedelta

timedelta 可以表示两个时间之间的时间差:

dtm.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

t1 = dtm.datetime(2018,7,12,15,6,9)
t2 = dtm.datetime(2018,9,11,12,33,23)
td = t2-t1
td
# datetime.timedelta(60, 77234) 
td.days,td.seconds
# (60, 77234)


# 将timedelta转换为: day, hour, minute
def parse_timedelta(td):
    """
    transform timedelta to day, hour, minute
    """
    return td.days, td.seconds//3600, (td.seconds//60)%60

parse_timedelta(td)
# (60, 21, 27)

利用timedelta进行时间外推:

import datetime as dtm

# 100天前的日期
(dtm.datetime.now() - dtm.timedelta(days = 100)).strftime("%Y-%m-%d") 

def TaftD(FORMAT_DATE,i): 
  """
  返回几天后的时间
  """
  return (dtm.datetime.strptime(FORMAT_DATE, '%Y-%m-%d') + dtm.timedelta(days = i)).strftime('%Y-%m-%d')

def TaftH(FORMAT_TIME,i): 
  """
  返回几小时后的时间
  """
  return (dtm.datetime.strptime(FORMAT_TIME, '%Y-%m-%d %H:%M:%S') + dtm.timedelta(hours = i)).strftime('%Y-%m-%d %H:%M:%S')

TaftD("2018-05-17", -2)
# '2018-05-15'
TaftH("2018-05-17 10:40:00", 2)
# '2018-05-17 12:40:00'

这一期主要介绍了是datetime进行时间处理的一些常用操作,后续我们会介绍pandas中的一些时间处理的操作。欢迎点赞转发期待哦~

以上就是Python如何进行时间处理的详细内容,更多关于Python时间处理的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python使用scrapy采集时伪装成HTTP/1.1的方法
Apr 08 Python
python web框架学习笔记
May 03 Python
简单的python后台管理程序
Apr 13 Python
python基础之包的导入和__init__.py的介绍
Jan 08 Python
Python实现的随机森林算法与简单总结
Jan 30 Python
利用Python进行数据可视化常见的9种方法!超实用!
Jul 11 Python
Scrapy-Redis结合POST请求获取数据的方法示例
May 07 Python
python机器学习库scikit-learn:SVR的基本应用
Jun 26 Python
python函数声明和调用定义及原理详解
Dec 02 Python
解决Pycharm的项目目录突然消失的问题
Jan 20 Python
Python 输出详细的异常信息(traceback)方式
Apr 08 Python
Python 串口通信的实现
Sep 29 Python
Python学习笔记之装饰器
Aug 06 #Python
用python实现前向分词最大匹配算法的示例代码
Aug 06 #Python
Python爬虫防封ip的一些技巧
Aug 06 #Python
Python无损压缩图片的示例代码
Aug 06 #Python
通过实例简单了解python yield使用方法
Aug 06 #Python
Python切片列表字符串如何实现切换
Aug 06 #Python
Python爬虫爬取微信朋友圈
Aug 06 #Python
You might like
php 无限级 SelectTree 类
2009/05/19 PHP
在PHP中养成7个面向对象的好习惯
2010/07/17 PHP
php定时计划任务的实现方法详解
2013/06/06 PHP
php+mysql实现的二级联动菜单效果详解
2016/05/10 PHP
用jQuery技术实现Tab页界面之二
2009/09/21 Javascript
ExtJs grid行 右键菜单的两种方法
2010/06/19 Javascript
jQuery UI Dialog控件中的表单无法正常提交的解决方法
2010/12/19 Javascript
js 实现css风格选择器(压缩后2KB)
2012/01/12 Javascript
jQuery不间断滚动效果(模拟百度新闻支持文字/图片/垂直滚动)
2013/02/05 Javascript
javascript特殊用法示例介绍
2013/11/29 Javascript
鼠标左键单击冲突的问题解决方法(防止冒泡)
2014/05/14 Javascript
使用documentElement正确取得当前可见区域的大小
2014/07/25 Javascript
JavaScript中的ArrayBuffer详细介绍
2014/12/08 Javascript
jQuery中:contains选择器用法实例
2014/12/30 Javascript
BOOTSTRAP时间控件显示在模态框下面的bug修复
2015/02/05 Javascript
JavaScript 继承详解(五)
2016/10/11 Javascript
requirejs按需加载angularjs文件实例
2017/06/08 Javascript
Vue中CSS动画原理的实现
2019/02/13 Javascript
vuex根据不同的用户权限展示不同的路由列表功能
2019/09/20 Javascript
ES6之Proxy的get方法详解
2019/10/11 Javascript
Vue-cli打包后部署到子目录下的路径问题说明
2020/09/02 Javascript
vue data有值,但是页面{{}} 取不到值的解决
2020/11/09 Javascript
Python 正则表达式(转义问题)
2014/12/15 Python
用Python的Django框架来制作一个RSS阅读器
2015/07/22 Python
tensorflow实现残差网络方式(mnist数据集)
2020/05/26 Python
Python-for循环的内部机制
2020/06/12 Python
Python生成器传参数及返回值原理解析
2020/07/22 Python
Python常用类型转换实现代码实例
2020/07/28 Python
小程序瀑布流解决左右两边高度差距过大的问题
2019/02/20 HTML / CSS
伦敦剧院门票:London Theatre Direct
2018/11/21 全球购物
英国DIY汽车维修配件网站:DIY Car Service Parts
2019/08/30 全球购物
护士自我鉴定范文
2013/10/06 职场文书
教师专业理论水平的自我评价分享
2013/11/09 职场文书
先进党支部事迹材料
2014/01/13 职场文书
2015年全国爱眼日活动小结
2015/02/27 职场文书
MySQL中EXPLAIN语句及用法
2022/05/20 MySQL