Python常用时间操作总结【取得当前时间、时间函数、应用等】


Posted in Python onMay 11, 2017

本文实例讲述了Python常用时间操作。分享给大家供大家参考,具体如下:

我们先导入必须用到的一个module

>>> import time

设置一个时间的格式,下面会用到

>>>ISOTIMEFORMAT='%Y-%m-%d %X'

看一下当前的时间,和其他很多语言相似这是从epoch(1970 年 1 月 1 日 00:00:00)开始到当前的秒数。

>>> time.time()
1180759620.859

上面的看不懂,换个格式来看看

>>> time.localtime()
(2007, 6, 2, 12, 47, 7, 5, 153, 0)

localtime返回tuple格式的时间,有一个和它类似的函数叫gmtime(),2个函数的差别是时区,gmtime()返回的是0时区的值,localtime返回的是当前时区的值。

>>> time.strftime( ISOTIMEFORMAT, time.localtime() )
'2007-06-02 12:54:29′

用上我们的时间格式定义了,使用strftime对时间做一个转换,如果取现在的时间,time.localtime() 可以不用。

>>> time.strftime( ISOTIMEFORMAT, time.localtime( time.time() ) )
'2007-06-02 12:54:31′
>>> time.strftime( ISOTIMEFORMAT, time.gmtime( time.time() ) )
'2007-06-02 04:55:02′

上面展示了gmtime和localtime的区别。

查看时区用

>>> time.timezone
-28800

上面的值是一个秒值,是当前时区和0时区相差的描述,-28800=-8*3600,即为东八区。

帖几个简单的函数

def ISOString2Time( s ):
  '''
  convert a ISO format time to second
  from:2006-04-12 16:46:40 to:23123123
  把一个时间转化为秒
  '''
  return time.strptime( s, ISOTIMEFORMAT )
def Time2ISOString( s ):
  '''
  convert second to a ISO format time
  from: 23123123 to: 2006-04-12 16:46:40
  把给定的秒转化为定义的格式
  '''
  return time.strftime( ISOTIMEFORMAT, time.localtime( float( s) ) )
def dateplustime( d, t ):
  '''
  d=2006-04-12 16:46:40
  t=2小时
  return 2006-04-12 18:46:40
  计算一个日期相差多少秒的日期,time2sec是另外一个函数,可以处理,3天,13分钟,10小时等字符串,回头再来写这个,需要结合正则表达式。
  '''
  return Time2ISOString( time.mktime( ISOString2Time( d ))+time2sec( t ) )
def dateMinDate( d1, d2 ):
  '''
  minus to iso format date,return seconds
  计算2个时间相差多少秒
  '''
  d1=ISOString2Time( d1 )
  d2=ISOString2Time( d2 )
  return time.mktime( d1 )-time.mktime( d2 )

一、简介

time模块提供各种操作时间的函数

说明:一般有两种表示时间的方式:

第一种是时间戳的方式(相对于1970.1.1 00:00:00以秒计算的偏移量),时间戳是惟一的

第二种以数组的形式表示即(struct_time),共有九个元素,分别表示,同一个时间戳的struct_time会因为时区不同而不同

year (four digits, e.g. 1998)
month (1-12)
day (1-31)
hours (0-23)
minutes (0-59)
seconds (0-59)
weekday (0-6, Monday is 0)
Julian day (day in the year, 1-366)
DST (Daylight Savings Time) flag (-1, 0 or 1) 是否是夏令时
If the DST flag is 0, the time is given in the regular time zone;
if it is 1, the time is given in the DST time zone;
if it is -1, mktime() should guess based on the date and time.

百度关于夏令时介绍:http://baike.baidu.com/view/100246.htm

UTC介绍可参考下文中关于UTC的介绍:https://3water.com/article/40758.htm

二、函数介绍

1.asctime()

asctime([tuple]) -> string

将一个struct_time(默认为当时时间),转换成字符串

Convert a time tuple to a string, e.g. 'Sat Jun 06 16:26:11 1998'.
When the time tuple is not present, current time as returned by localtime()
is used.

2.clock()

clock() -> floating point number

该函数有两个功能,

在第一次调用的时候,返回的是程序运行的实际时间;

以第二次之后的调用,返回的是自第一次调用后,到这次调用的时间间隔

示例:

import time
if __name__ == '__main__':
  time.sleep(1)
  print "clock1:%s" % time.clock()
  time.sleep(1)
  print "clock2:%s" % time.clock()
  time.sleep(1)
  print "clock3:%s" % time.clock()

输出:

clock1:3.35238137808e-006
clock2:1.00004944763
clock3:2.00012040636

其中第一个clock输出的是程序运行时间

第二、三个clock输出的都是与第一个clock的时间间隔

3.sleep(...)

sleep(seconds)

线程推迟指定的时间运行,经过测试,单位为秒,但是在帮助文档中有以下这样一句话,这关是看不懂

“The argument may be a floating point number for subsecond precision.”

4.ctime(...)

ctime(seconds) -> string

将一个时间戳(默认为当前时间)转换成一个时间字符串

例如:

time.ctime()

输出为:'Sat Mar 28 22:24:24 2009'

5.gmtime(...)

gmtime([seconds]) -> (tm_year, tm_mon, tm_day, tm_hour, tm_min,tm_sec, tm_wday, tm_yday, tm_isdst)

将一个时间戳转换成一个UTC时区(0时区)的struct_time,如果seconds参数未输入,则以当前时间为转换标准

6.localtime(...)

localtime([seconds]) -> (tm_year,tm_mon,tm_day,tm_hour,tm_min,tm_sec,tm_wday,tm_yday,tm_isdst)

将一个时间戳转换成一个当前时区的struct_time,如果seconds参数未输入,则以当前时间为转换标准

7.mktime(...)

mktime(tuple) -> floating point number

将一个以struct_time转换为时间戳

8.strftime(...)

strftime(format[, tuple]) -> string

将指定的struct_time(默认为当前时间),根据指定的格式化字符串输出

python中时间日期格式化符号:

%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)

%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身

9.strptime(...)

strptime(string, format) -> struct_time

将时间字符串根据指定的格式化符转换成数组形式的时间

例如:

2009-03-20 11:45:39  对应的格式化字符串为:%Y-%m-%d %H:%M:%S

Sat Mar 28 22:24:24 2009 对应的格式化字符串为:%a %b %d %H:%M:%S %Y

10.time(...)

time() -> floating point number

返回当前时间的时间戳

三、疑点

1.夏令时

在struct_time中,夏令时好像没有用,例如

a = (2009, 6, 28, 23, 8, 34, 5, 87, 1)
b = (2009, 6, 28, 23, 8, 34, 5, 87, 0)

a和b分别表示的是夏令时和标准时间,它们之间转换为时间戳应该相关3600,但是转换后输出都为646585714.0

四、小应用

1.python获取当前时间

time.time() 获取当前时间戳
time.localtime() 当前时间的struct_time形式
time.ctime() 当前时间的字符串形式

2.python格式化字符串

格式化成2009-03-20 11:45:39形式

time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

格式化成Sat Mar 28 22:24:24 2009形式

time.strftime("%a %b %d %H:%M:%S %Y", time.localtime())

3.将格式字符串转换为时间戳

a = "Sat Mar 28 22:24:24 2009"
b = time.mktime(time.strptime(a,"%a %b %d %H:%M:%S %Y"))

PS:本站还提供了几款关于Unix时间戳转换及日期在线工具,非常实用,提供给大家参考:

Unix时间戳(timestamp)转换工具:
http://tools.3water.com/code/unixtime

在线日期/天数计算器:
http://tools.3water.com/jisuanqi/date_jisuanqi

在线万年历日历:
http://tools.3water.com/bianmin/wannianli

在线阴历/阳历转换工具:
http://tools.3water.com/bianmin/yinli2yangli

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python3 入门教程 简单但比较不错
Nov 29 Python
Python中常用操作字符串的函数与方法总结
Feb 04 Python
Python中利用Scipy包的SIFT方法进行图片识别的实例教程
Jun 03 Python
Java多线程编程中ThreadLocal类的用法及深入
Jun 21 Python
破解安装Pycharm的方法
Oct 19 Python
pytorch sampler对数据进行采样的实现
Dec 31 Python
Python3 中sorted() 函数的用法
Mar 24 Python
如何安装并在pycharm使用selenium的方法
Apr 30 Python
Python logging模块写入中文出现乱码
May 21 Python
pycharm sciview的图片另存为操作
Jun 01 Python
详解Python IO编程
Jul 24 Python
Django haystack实现全文搜索代码示例
Nov 28 Python
详解Python读取配置文件模块ConfigParser
May 11 #Python
python如何获取服务器硬件信息
May 11 #Python
浅谈Python基础之I/O模型
May 11 #Python
老生常谈Python进阶之装饰器
May 11 #Python
python 第三方库的安装及pip的使用详解
May 11 #Python
插入排序_Python与PHP的实现版(推荐)
May 11 #Python
Python实现计算两个时间之间相差天数的方法
May 10 #Python
You might like
php 获取当前访问的url文件名的方法小结
2010/02/08 PHP
解析PHP中常见的mongodb查询操作
2013/06/20 PHP
Drupal7连接多个数据库及常见问题解决
2014/03/02 PHP
PHP tp5中使用原生sql查询代码实例
2020/10/28 PHP
javascript在myeclipse中报错的解决方法
2013/10/29 Javascript
js几秒以后倒计时跳转示例
2013/12/26 Javascript
JS获取下拉框显示值和判断单选按钮的方法
2015/07/09 Javascript
七夕情人节丘比特射箭小游戏
2015/08/20 Javascript
jQuery检测滚动条是否到达底部
2015/12/15 Javascript
Node.js文件操作方法汇总
2016/03/22 Javascript
js提示框替代系统alert,自动关闭alert对话框的实现方法
2016/11/07 Javascript
JS中如何实现Laravel的route函数详解
2017/02/12 Javascript
canvas 绘制圆形时钟
2017/02/22 Javascript
jQuery回调方法使用示例
2017/06/26 jQuery
JS点击图片弹出文件选择框并覆盖原图功能的实现代码
2017/08/25 Javascript
利用node实现一个批量重命名文件的函数
2017/12/21 Javascript
原生JS写Ajax的请求函数功能
2017/12/22 Javascript
微信小程序踩坑记录之解决tabBar.list[3].selectedIconPath大小超过40kb
2018/07/04 Javascript
说说Vue.js中的functional函数化组件的使用
2019/02/12 Javascript
亲自动手实现vue日历控件
2019/06/26 Javascript
原生js代码能实现call和bind吗
2019/07/31 Javascript
JavaScript数组排序的六种常见算法总结
2020/08/18 Javascript
[03:13]DOTA2-DPC中国联赛1月25日Recap集锦
2021/03/11 DOTA
基于python实现学生管理系统
2018/10/17 Python
python自动化UI工具发送QQ消息的实例
2019/08/27 Python
基于Python计算圆周率pi代码实例
2020/03/25 Python
CSS3实现苹果手机解锁的字体闪亮效果示例
2021/01/05 HTML / CSS
XD健身器材:Kevlar球、Crossfit健身球
2019/03/26 全球购物
一些Solaris面试题
2015/12/22 面试题
无传销社区工作方案
2014/05/13 职场文书
五水共治捐款倡议书
2014/05/14 职场文书
银行优秀员工事迹材料
2014/05/29 职场文书
生物科学专业自荐书
2014/06/20 职场文书
交通安全温馨提示语
2015/07/14 职场文书
基于python定位棋子位置及识别棋子颜色
2021/07/26 Python
MySQL读取JSON转换的方式
2022/03/18 MySQL