time模块

Posted Bigberg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了time模块相关的知识,希望对你有一定的参考价值。

一、简介

1.在python中通常有这几种方式表示时间:

  1) 时间戳

      2) 格式化的时间字符串

      3) 时间元组(struct_time)共九个元素

 

2. UTC亦即格林威治时间,世界标准时间。在中国为 UTC+8。

3. 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。返回时间戳方式的函数主要有time()等。

4.时间元组(struct_time)方式:struct_time共有9个元素,返回struct_time的主要函数有gmtime(),localtime(),strptime()。如下:

  

 

 二、时间函数

import time

1. time.time()  返回当前时间的时间戳

t = time.time()
print(t)

# 输出
1495016507.4327872

  

2. time.localtime() 将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准

t1 = time.localtime()
print(t1)

#输出
time.struct_time(tm_year=2017, tm_mon=5, tm_mday=17, tm_hour=18, tm_min=22, tm_sec=54, tm_wday=2, tm_yday=137, tm_isdst=0)

  

3.time.gmtime() 和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。

t3 = time.gmtime()
print(t3)

# 输出
time.struct_time(tm_year=2017, tm_mon=5, tm_mday=17, tm_hour=10, tm_min=22, tm_sec=54, tm_wday=2, tm_yday=137, tm_isdst=0)

  可以看到 tm_hour 和 上面的相差了8个小时

 

4. time.mktime() 将一个struct_time转化为时间戳。

print(time.mktime(t1))

# 输出
1495016896.0

 

5.time.asctime() 把一个表示时间的元组或者struct_time表示为这种形式:\'Sun Jun 20 23:21:05 1993\'。如果没有参数,将会将time.localtime()作为参数传入。

print(time.asctime())

# 输出
Wed May 17 19:09:05 2017

 

6. time.ctime() 同上

 

7.time.strftime(format,t) 

把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。如果元组中任何一个元素越界,ValueError的错误将会被抛出。

t = time.localtime()
print(t)

print(time.strftime("%Y-%m-%d %X", t))

# 输出

time.struct_time(tm_year=2017, tm_mon=5, tm_mday=17, tm_hour=19, tm_min=16, tm_sec=4, tm_wday=2, tm_yday=137, tm_isdst=0)
2017-05-17 19:16:04

  

 

8.time.strptime(string[, format]):把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作。

t = "2017-05-16 17:23:12"

print(time.strptime(t, "%Y-%m-%d %H:%M:%S"))

# 输出
time.struct_time(tm_year=2017, tm_mon=5, tm_mday=16, tm_hour=17, tm_min=23, tm_sec=12, tm_wday=1, tm_yday=136, tm_isdst=-1)

  

三、时间转换

1. 格式化字符串 --- 时间戳

import time
print("格式化字符串".center(20, \'-\'))
t = "2017-05-16 17:23:12"
print(t)
print("时间元组".center(20, \'-\'))
t1 = time.strptime(t, "%Y-%m-%d %H:%M:%S")
print(t1)
print("时间戳".center(20, \'-\'))
t2 = time.mktime(t1)
print(t2)

# 输出
-------格式化字符串-------
2017-05-16 17:23:12
--------时间元组--------
time.struct_time(tm_year=2017, tm_mon=5, tm_mday=16, tm_hour=17, tm_min=23, tm_sec=12, tm_wday=1, tm_yday=136, tm_isdst=-1)
--------时间戳---------
1494926592.0

  

 2. 时间戳 --- 格式化字符串

import time
print("时间戳".center(20, \'-\'))
t = time.time()
print(t)

print("时间元组".center(20, \'-\'))
t1 = time.localtime(t)    # 如果此处用 time.gmtime()则生成的时间元组会和本地时间有一个UTC时间差
print(t1)

print("格式化字符串".center(20, \'-\'))
t2 = time.strftime("%Y-%m-%d %X", t1)
print(t2)

# 输出

--------时间戳---------
1495020952.5951612
--------时间元组--------
time.struct_time(tm_year=2017, tm_mon=5, tm_mday=17, tm_hour=19, tm_min=35, tm_sec=52, tm_wday=2, tm_yday=137, tm_isdst=0)
-------格式化字符串-------
2017-05-17 19:35:52

  

 

四、datetime模块

1. datetime.datetime.now()

返回当前时间,格式如:2017-07-04 19:33:38.821027

import datetime

t = datetime.datetime.now()
print(t)

#输出
2017-07-04 19:33:38.821027

 

 2、datetime.date.fromtimestamp()

时间戳转换为日期格式

import time
import datetime

t = time.time()
print(t)

format_t = datetime.date.fromtimestamp(t)
print(format_t)

#输出
1499168293.3212767
2017-07-04

  

 3、datetime.timedelta()

对某个时间进行加减

>>> import datetime
#当前时间加3天
>>> t1 = datetime.datetime.now()  + datetime.timedelta(days=3)
>>> print(t1)
2017-04-03 10:42:50.714910
#当前时间减3天
>>> t1 = datetime.datetime.now()  - datetime.timedelta(days=3)
>>> print(t1)
2017-03-28 10:43:17.260111
#当前时间减3天
>>> t1 = datetime.datetime.now()  + datetime.timedelta(days=-3)
>>> print(t1)
2017-03-28 10:43:35.758742
#当前时间加3个小时
>>> t1 = datetime.datetime.now()  + datetime.timedelta(hours=3)
>>> print(t1)
2017-03-31 13:44:24.805354
#当前时间加30分钟
>>> t1 = datetime.datetime.now()  + datetime.timedelta(minutes=30)
>>> print(t1)
2017-03-31 11:14:55.990195

  

 

以上是关于time模块的主要内容,如果未能解决你的问题,请参考以下文章

1 代码片段1

学习笔记:python3,代码片段(2017)

如何使用模块化代码片段中的LeakCanary检测内存泄漏?

如何有条件地将 C 代码片段编译到我的 Perl 模块?

如何计算破折号媒体片段名称的 $Time$ 变量?

golang代码片段(摘抄)