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 把数据 json格式输出的实例代码
Oct 31 Python
使用matplotlib画散点图的方法
May 25 Python
opencv实现静态手势识别 opencv实现剪刀石头布游戏
Jan 22 Python
Python3最长回文子串算法示例
Mar 04 Python
Python 抓取微信公众号账号信息的方法
Jun 14 Python
Django 用户认证组件使用详解
Jul 23 Python
python爬虫 2019中国好声音评论爬取过程解析
Aug 26 Python
Python 、Pycharm、Anaconda三者的区别与联系、安装过程及注意事项
Oct 11 Python
Django 简单实现分页与搜索功能的示例代码
Nov 07 Python
Django配置文件代码说明
Dec 04 Python
python学习笔记之多进程
Aug 06 Python
python plt.plot bar 如何设置绘图尺寸大小
Jun 01 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 XPath对XML文件查找及修改实现代码
2011/07/27 PHP
php中的mongodb select常用操作代码示例
2014/09/06 PHP
php和C#的yield迭代器实现方法对比分析
2019/07/17 PHP
js 第二代身份证号码的验证机制代码
2011/05/12 Javascript
javascript获取form里的表单元素的示例代码
2014/02/14 Javascript
现如今最流行的JavaScript代码规范
2014/03/08 Javascript
浅谈Unicode与JavaScript的发展史
2015/01/19 Javascript
js实现数字每三位加逗号的方法
2015/02/05 Javascript
yui3的AOP(面向切面编程)和OOP(面向对象编程)
2015/05/01 Javascript
JavaScript学习笔记(三):JavaScript也有入口Main函数
2015/09/12 Javascript
AngularJS中实现显示或隐藏动画效果的方式总结
2015/12/31 Javascript
Bootstrap精简教程中秋大放送
2016/09/15 Javascript
JavaScript实现实时更新系统时间的实例代码
2017/04/04 Javascript
JavaScript原型对象、构造函数和实例对象功能与用法详解
2018/08/04 Javascript
nodejs中方法和模块用法示例
2018/12/24 NodeJs
JavaScript中将值转换为字符串的五种方法总结
2019/06/06 Javascript
[54:10]完美世界DOTA2联赛PWL S2 Magma vs FTD 第二场 11.29
2020/12/03 DOTA
详解python 拆包可迭代数据如tuple, list
2017/12/29 Python
Python中optparser库用法实例详解
2018/01/26 Python
python-str,list,set间的转换实例
2018/06/27 Python
Python中字符串与编码示例代码
2019/05/20 Python
Python函数参数匹配模型通用规则keyword-only参数详解
2019/06/10 Python
selenium获取当前页面的url、源码、title的方法
2019/06/12 Python
Django 实现admin后台显示图片缩略图的例子
2019/07/28 Python
Python基于requests实现模拟上传文件
2020/04/21 Python
Python爬虫爬取微博热搜保存为 Markdown 文件的源码
2021/02/22 Python
英国女鞋购物网站:Moda in Pelle
2019/02/18 全球购物
美国最佳在线航班预订网站:LookupFare
2019/03/26 全球购物
德国旅行、体验和活动的预订平台:Watado
2019/12/04 全球购物
Ego Shoes官网:英国时髦鞋类品牌
2020/10/19 全球购物
标准导师推荐信(医学类)
2013/10/28 职场文书
优秀求职自荐信怎样写
2013/12/18 职场文书
致铅球运动员加油稿
2014/02/13 职场文书
《藤野先生》教学反思
2014/02/19 职场文书
高校自主招生自荐信2015
2015/03/04 职场文书
2015年暑期社会实践方案
2015/07/14 职场文书