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学习笔记 下载
Feb 10 Python
python进阶教程之异常处理
Aug 30 Python
利用Python命令行传递实例化对象的方法
Nov 02 Python
深入浅析python 中的匿名函数
May 21 Python
python自动化生成IOS的图标
Nov 13 Python
Python设计模式之简单工厂模式实例详解
Jan 22 Python
利用Python实现微信找房机器人实例教程
Mar 10 Python
python实现维吉尼亚加密法
Mar 20 Python
Django框架中序列化和反序列化的例子
Aug 06 Python
Django项目使用ckeditor详解(不使用admin)
Dec 17 Python
Python+opencv+pyaudio实现带声音屏幕录制
Dec 23 Python
PyQt中使用QtSql连接MySql数据库的方法
Jul 28 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
关于PHP5 Session生命周期介绍
2010/03/02 PHP
PHP统计目录下的文件总数及代码行数(去除注释及空行)
2011/01/17 PHP
php实现检查文章是否被百度收录
2015/01/27 PHP
Windows平台实现PHP连接SQL Server2008的方法
2017/07/26 PHP
laravel 中如何使用ajax和vue总结
2017/08/16 PHP
tp5 sum某个字段相加得到总数的例子
2019/10/18 PHP
如何通过PHP实现Des加密算法代码实例
2020/05/09 PHP
PHP中echo与print区别点整理
2021/03/09 PHP
js 金额文本框实现代码
2012/02/14 Javascript
JavaScript计时器示例分析
2015/02/05 Javascript
JavaScript获取页面上被选中文字的方法技巧
2015/03/13 Javascript
jQuery原生的动画效果
2015/07/10 Javascript
JS原型对象的创建方法详解
2016/06/16 Javascript
jQuery+HTML5+CSS3制作支持响应式布局时间轴插件
2016/08/10 Javascript
Laydate时间组件在火狐浏览器下有多时间输入框时只能给第一个输入框赋值的解决方法
2016/08/18 Javascript
AngularJS动态生成div的ID源码解析
2016/08/29 Javascript
详解离线安装npm包的几种方法
2018/11/25 Javascript
JavaScript实现shuffle数组洗牌操作示例
2019/01/03 Javascript
基于 vue-skeleton-webpack-plugin 的骨架屏实战
2019/08/05 Javascript
详解Python编程中基本的数学计算使用
2016/02/04 Python
python 数据的清理行为实例详解
2017/07/12 Python
selenium+python实现自动登录脚本
2018/04/22 Python
Python版名片管理系统
2018/11/30 Python
Django RBAC权限管理设计过程详解
2019/08/06 Python
Python帮你识破双11的套路
2019/11/11 Python
Python基于mediainfo批量重命名图片文件
2020/12/29 Python
美国知名的在线旅游服务网站:Priceline
2016/07/23 全球购物
Pure Collection美国官网:来自英国羊绒专家的奢华羊绒
2017/11/19 全球购物
JAVA中运算符的分类及举例
2015/09/12 面试题
挖掘机司机岗位职责
2014/02/12 职场文书
双拥工作宣传标语
2014/06/26 职场文书
五一劳动节慰问信
2015/02/14 职场文书
2015财务年度工作总结范文
2015/05/04 职场文书
CSS实现多个元素在盒子内两端对齐效果
2021/03/30 HTML / CSS
oracle DGMGRL ORA-16603报错的解决方法(DG Broker)
2021/04/06 Oracle
spring注解 @PropertySource配置数据源全流程
2022/03/25 Java/Android