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 相关文章推荐
java直接调用python脚本的例子
Feb 16 Python
python根据给定文件返回文件名和扩展名的方法
Mar 27 Python
ansible作为python模块库使用的方法实例
Jan 17 Python
更新修改后的Python模块方法
Mar 03 Python
Python OpenCV实现视频分帧
Jun 01 Python
详解python websocket获取实时数据的几种常见链接方式
Jul 01 Python
python 画二维、三维点之间的线段实现方法
Jul 07 Python
python模拟鼠标点击和键盘输入的操作
Aug 04 Python
Python pip安装第三方库实现过程解析
Jul 09 Python
PyCharm最新激活码PyCharm2020.2.3有效
Nov 18 Python
Selenium 安装和简单使用的实现
Dec 04 Python
python 开心网和豆瓣日记爬取的小爬虫
May 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入门源程序
2006/10/09 PHP
PHP 获取客户端真实IP地址多种方法小结
2010/05/15 PHP
Destoon旺旺无法正常显示,点击提示“会员名不存在”的解决办法
2014/06/21 PHP
laravel通过a标签从视图向控制器实现传值
2019/10/15 PHP
通用javascript脚本函数库 方便开发
2009/10/13 Javascript
Javascript结合css实现网页换肤功能
2009/11/02 Javascript
qTip 基于JQuery的Tooltip插件[兼容性好]
2010/09/01 Javascript
jquery中通过过滤器获取表单元素的实现代码
2011/07/05 Javascript
JavaScript高级程序设计 读书笔记之九 本地对象Array
2012/02/27 Javascript
JavaScript 基础篇之对象、数组使用介绍(三)
2012/04/07 Javascript
jQuery编辑器KindEditor4.1.4代码高亮显示设置教程
2013/03/01 Javascript
JS 实现图片直接下载示例代码
2013/07/22 Javascript
JavaScript访问CSS属性的几种方式介绍
2014/07/21 Javascript
javascript中DOM复选框选择用法实例
2015/05/14 Javascript
jQuery实现HTML表格单元格的合并功能
2016/04/06 Javascript
PHP获取当前页面完整URL的方法
2016/12/02 Javascript
Bootstrap的popover(弹出框)在append后弹不出(失效)
2017/02/27 Javascript
jQuery鼠标移动图片上实现放大效果
2017/06/25 jQuery
react开发教程之React 组件之间的通信方式
2017/08/12 Javascript
利用js将ajax获取到的后台数据动态加载至网页中的方法
2018/08/08 Javascript
详解如何创建并发布一个 vue 组件
2018/11/08 Javascript
angular 表单验证器验证的同时限制输入的实现
2019/04/11 Javascript
vue使用video插件vue-video-player详解
2020/10/23 Javascript
详解Vue数据驱动原理
2020/11/17 Javascript
详解vue实现坐标拾取器功能示例
2020/11/18 Vue.js
基于Python中random.sample()的替代方案
2020/05/23 Python
Subside Sports德国:足球球衣和球迷商品
2019/06/08 全球购物
世界上最大的冷却器制造商:Igloo Coolers
2019/07/23 全球购物
德国苹果商店:MacTrade
2020/05/18 全球购物
万代美国官网:PREMIUM BANDAI USA
2020/09/11 全球购物
幼儿园义卖活动方案
2014/01/17 职场文书
中专毕业生自我鉴定
2014/02/02 职场文书
初中学生期末评语
2014/04/24 职场文书
体现团队精神的口号
2014/06/06 职场文书
高一地理教学工作总结
2015/08/12 职场文书
MySQL Router的安装部署
2021/04/24 MySQL