前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python下的日期与时间(时间格式转换、时间戳处理,时间差处理)

python下的日期与时间(时间格式转换、时间戳处理,时间差处理)

作者头像
学到老
发布2019-01-25 10:47:29
13.7K0
发布2019-01-25 10:47:29
举报

python下的日期与时间

一、在Python中,时间主要有三种表示形式,

  • 1.时间戳(TimeStamp):1970年1月1日之后的秒
  • 2.时间元组格式化形式 包含了:年、日、星期 得到time.struct_time(tm_year=2017, tm_mon=10, tm_mday=14…)
  • 3.可视化的字符串 2017-11-11 11:44
代码语言:javascript
复制
import time
#1 时间戳:1970年1月1日之后的秒
print('1.时间戳形式:{}'.format(time.time()))
代码语言:javascript
复制
1.时间戳形式:1542765908.295993

时间戳单位最适于做日期运算。但是1970年之前的日期就无法以此表示了。太遥远的日期也不行,UNIX和Windows只支持到2038年。

2.时间戳科学的解释

最初计算机操作系统是32位,而时间也是用32位表示。32位能表示的最大值是2147483647。另外1年365天的总秒数是31536000,2147483647/31536000 = 68.1,也就是说32位能表示的最长时间是68年,而实际上到2038年01月19日03时14分07秒,便会到达最大时间,过了这个时间点,所有32位操作系统时间便会变为10000000 00000000 00000000 00000000,也就是1901年12月13日20时45分52秒,这样便会出现时间回归的现象,很多软件便会运行异常了。 到这里,我想问题的答案已经出来了:因为用32位来表示时间的最大间隔是68年,而最早出现的UNIX操作系统考虑到计算机产生的年代和应用的时限综合取了1970年1月1日作为UNIX TIME的纪元时间(开始时间),至于时间回归的现象相信随着64为操作系统的产生逐渐得到解决,因为用64位操作系统可以表示到292,277,026,596年12月4日15时30分08秒,相信我们的N代子孙,哪怕地球毁灭那天都不用愁不够用了,因为这个时间已经是千亿年以后了。

为什么是1970,因为这个设计时候是 70 年代

代码语言:javascript
复制
#2 元组格式化形式 包含了:年、日、星期  得到time.struct_time(tm_year=2017, tm_mon=10, tm_mday=14...)
print('2.元组格式化形式:{}'.format(time.gmtime()))
代码语言:javascript
复制
2.元组格式化形式:time.struct_time(tm_year=2018, tm_mon=11, tm_mday=21, tm_hour=2, tm_min=5, tm_sec=9, tm_wday=2, tm_yday=325, tm_isdst=0)

什么是时间元组?

很多Python函数用一个元组装起来的9组数字处理时间:

序号

字段

0

4位数年

2008

1

1 到 12

2

1到31

3

小时

0到23

4

分钟

0到59

5

0到61 (60或61 是闰秒)

6

一周的第几日

0到6 (0是周一)

7

一年的第几日

1到366 (儒略历)

8

夏令时

-1, 0, 1, -1是决定是否为夏令时的旗帜

也就是struct_time元组。这种结构具有如下属性:

序号

属性

0

tm_year

2008

1

tm_mon

1 到 12

2

tm_mday

1 到 31

3

tm_hour

0 到 23

4

tm_min

0 到 59

5

tm_sec

0 到 61 (60或61 是闰秒)

6

tm_wday

0到6 (0是周一)

7

tm_yday

1 到 366(儒略历)

8

tm_isdst

-1, 0, 1, -1是决定是否为夏令时的旗帜

代码语言:javascript
复制
#3 可视化的字符串 2017-11-11 11:44
print('3.可视化的字符串:{}'.format(time.strftime("%Y-%m-%d %H:%M:%S")))
代码语言:javascript
复制
3.可视化的字符串:2018-11-21 10:05:10

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 当前时区的名称
  • %% %号本身

二、三种时间的转化

1.时间戳------->时间元组:

UTC是国际时,UTC+8就是国际时加八小时,是东八区时间,也就是北京时间。

代码语言:javascript
复制
#用time.localtime()方法,将一个时间戳转换为当前时区的struct_time。
time1 = time.time()
tuple1 = time.localtime(time1) # UTC + 8 时间
tuple1
代码语言:javascript
复制
time.struct_time(tm_year=2018, tm_mon=11, tm_mday=21, tm_hour=10, tm_min=5, tm_sec=11, tm_wday=2, tm_yday=325, tm_isdst=0)
代码语言:javascript
复制
time1 = time.time()
tuple1 = time.gmtime(time1)  # UTC时间
tuple1
代码语言:javascript
复制
time.struct_time(tm_year=2018, tm_mon=11, tm_mday=21, tm_hour=2, tm_min=5, tm_sec=11, tm_wday=2, tm_yday=325, tm_isdst=0)

2.时间元组-------->时间戳:

代码语言:javascript
复制
tuple2 = time.localtime()
time2 = time.mktime(tuple2)
time2
代码语言:javascript
复制
1542765912.0

3.时间元组--------->字符串:

-strftime(format[, tuple])

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

代码语言:javascript
复制
tuple3 = time.localtime()
strTime = time.strftime("%Y-%m-%d %H:%M:%S",tuple3)
strTime

‘2018-11-21 10:20:27’

代码语言:javascript
复制
strTime1 = time.strftime("%Y{y}%m{m}%d{d} %H{h}%M{m1}%S{s}",tuple3).format(y="年",m="月",d="日",h="时",m1="分",s="秒")
strTime1
代码语言:javascript
复制
'2018年11月21日 10时05分12秒'

4、asctime()方法

time.asctime([t]))

  • 参数

t – 9个元素的元组(time.struct_time)或者通过函数 gmtime() 或 localtime() 返回的时间值。

  • 返回值

返回一个可读的形式为"Tue Dec 11 18:07:14 2008"(2008年12月11日 周二18时07分14秒)的24个字符的字符串。

代码语言:javascript
复制
t = time.localtime()
print(type(t),t)
time.asctime(t)
代码语言:javascript
复制
<class 'time.struct_time'> time.struct_time(tm_year=2018, tm_mon=11, tm_mday=21, tm_hour=10, tm_min=5, tm_sec=13, tm_wday=2, tm_yday=325, tm_isdst=0)





'Wed Nov 21 10:05:13 2018'

5、把时间戳---->time.asctime()

代码语言:javascript
复制
t=time.time()
print(type(t),t)
time.ctime(time.time())
代码语言:javascript
复制
<class 'float'> 1542765913.8286655





'Wed Nov 21 10:05:13 2018'

三、时间戳计算时间差

代码语言:javascript
复制
#根据时间戳来计算(注意时间戳时秒还是毫秒)

#1、天数
time.time()+86400*7 #当前时间的后7天

#2、小时
time.time()+3600*7 #当前时间的后7小时

#3、分钟
time.time()+60*7 #当前时间的后7分钟
代码语言:javascript
复制
1542766334.2900052

三、字符串形式计算时间差

代码语言:javascript
复制
#字符串时间差
import datetime

start ="2018-06-19 17:37:31"
end = "2019-07-30 17:37:31"
start=time.strptime(start, "%Y-%m-%d %H:%M:%S")
end=time.strptime(end, "%Y-%m-%d %H:%M:%S")
userStart=datetime.datetime(start[0],start[1],start[2])
userEnd=datetime.datetime(end[0],end[1],end[2])
print ((userEnd-userStart).days) # 0 天数
# print (end-start).total_seconds() # 30.029522 精确秒数
# print (end-start).seconds # 30 秒数
# print (end-start).microseconds # 29522 毫秒数
代码语言:javascript
复制
406
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年11月21日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • python下的日期与时间
    • 一、在Python中,时间主要有三种表示形式,
    • 二、三种时间的转化
      • 1.时间戳------->时间元组:
        • 2.时间元组-------->时间戳:
          • 3.时间元组--------->字符串:
            • 4、asctime()方法
              • 5、把时间戳---->time.asctime()
              • 三、时间戳计算时间差
                • 三、字符串形式计算时间差
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档