python linux 时间格式化,Python中的时间日期转换

Python关于时间日期有两个库datetime和time,于是我们要在四种格式之间转换:

datetime.datetime对象 datetime.datetime.now()

time.struct_time对象  time.localtime()

字符串 "2010-12-04T10:30:53"

时间戳 1291433453  (一般我们不关心微秒)

列一下它们的转换方法:

Python代码

dt = datetime.datetime(2010,12,4,10,30,53)

dt = datetime.datetime.strptime("2010-12-04T10:30:53","%Y-%m-%dT%H:%M:%S")

dt.strftime("%Y-%m-%dT%H:%M:%S")     ->"2010-12-04T10:30:53"

或者 dt.isoformat().split(".").pop(0)     ->"2010-12-04T10:30:53"

dt = datetime.datetime.fromtimestamp(1291433453)

(?) dt ->1291433453

t = time.localtime(1291433453)

t = dt.timetuple()

t = time.strptime("2010-12-04T10:30:53","%Y-%m-%dT%H:%M:%S")

t.strftime("%Y-%m-%dT%H:%M:%S")     ->"2010-12-04T10:30:53"

long( time.mktime(t) )  ->1291433453

(?) t -> dtdt = datetime.datetime(2010, 12, 4, 10, 30, 53)

dt = datetime.datetime.strptime("2010-12-04T10:30:53", "%Y-%m-%dT%H:%M:%S")

dt.strftime("%Y-%m-%dT%H:%M:%S") -> "2010-12-04T10:30:53"

或者 dt.isoformat().split(".").pop(0) -> "2010-12-04T10:30:53"

dt = datetime.datetime.fromtimestamp(1291433453)

(?) dt -> 1291433453

t = time.localtime(1291433453)

t = dt.timetuple()

t = time.strptime("2010-12-04T10:30:53", "%Y-%m-%dT%H:%M:%S")

t.strftime("%Y-%m-%dT%H:%M:%S") -> "2010-12-04T10:30:53"

long( time.mktime(t) ) -> 1291433453

(?) t -> dt

可以看出,Python没有提供直接的time.struct_time对象到datetime.datetime对象的转换,也没有直接提供datetime.datetime对象到时间戳的转换。另外,Python的两个strftime,strptime中都没有时间戳的格式化符号。

对time.struct_time对象到datetime.datetime对象的转换,很容易想到通过字符串形式过渡一下:

Python代码

dt = datetime.datetime.strptime(t.strftime("%Y-%m-%dT%H:%M:%S"),"%Y-%m-%dT%H:%M:%S")dt = datetime.datetime.strptime(t.strftime("%Y-%m-%dT%H:%M:%S"), "%Y-%m-%dT%H:%M:%S")

更好的方式应该是这样

Python代码

dt = datetime.datetime(*tuple(t)[:6])dt = datetime.datetime(*tuple(t)[:6])

对于datetime.datetime对象到时间戳的转换,常用做法是通过time.struct_time对象过渡:

Python代码

long(time.mktime(dt.timetuple()))

long(time.mktime(dt.timetuple()))

坏处是要同时用到datetime和time两个模块。

其实可以在datetime内部解决,现在给一个三种格式转为时间戳的方法:

Python代码

defto_timestamp(mytime, format="%Y-%m-%dT%H:%M:%S"):

importtime

fromdatetimeimportdatetime

ifisinstance(mytime, time.struct_time):

returnlong(time.mktime(mytime))

elifisinstance(mytime, str):

mytime = datetime.strptime(mytime, format)

ifisinstance(mytime, datetime):

#得到一个与时间戳相等的datetime.timedelta对象

delta = mytime - datetime(1970,1,1)

utc = delta.days *86400L+ delta.seconds

#上面求得delta是一个localtime操作,把时区也考虑进去了,我们要还原

returnutc -8*3600

def to_timestamp(mytime, format="%Y-%m-%dT%H:%M:%S"):

import time

from datetime import datetime

if isinstance(mytime, time.struct_time):

return long(time.mktime(mytime))

elif isinstance(mytime, str):

mytime = datetime.strptime(mytime, format)

if isinstance(mytime, datetime):

#得到一个与时间戳相等的datetime.timedelta对象

delta = mytime - datetime(1970,1,1)

utc = delta.days * 86400L + delta.seconds

#上面求得delta是一个localtime操作,把时区也考虑进去了,我们要还原

return utc - 8 * 3600Python代码

long(dt.strftime("%s"))0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值