Python time to age
我正在尝试将日期字符串转换为年龄。
字符串就像:"星期一,2008年11月17日01:45:32 +0200",我需要知道它已经有多少天了。
我使用以下方式成功转换了日期:
1 2 | >>> time.strptime("Mon, 17 Nov 2008 01:45:32 +0200","%a, %d %b %Y %H:%M:%S +0200") (2008, 11, 17, 1, 45, 32, 0, 322, -1) |
出于某种原因,%z给了我+0200的错误,但这并不重要。
我可以使用以下时间获取当前时间:
1 2 | >>> time.localtime() (2009, 2, 3, 19, 55, 32, 1, 34, 0) |
但是如何在不通过列表中的每个项目并手动执行的情况下从另一个中减去一个?
您需要使用模块
1 2 3 4 5 6 7 | from datetime import datetime t1 = datetime.strptime("Mon, 17 Nov 2008 01:45:32 +0200","%a, %d %b %Y %H:%M:%S +0200") t2 = datetime.now() tdelta = t2 - t1 # actually a datetime.timedelta object print tdelta.days |
在Python中,
1 2 3 | from datetime import datetime age = datetime.now() - datetime.strptime(...) print age.days |
结果是timedelta对象。
1 2 3 4 5 6 7 | from datetime import datetime, timedelta datetime.now() datetime.datetime(2009, 2, 3, 15, 17, 35, 156000) datetime.now() - datetime(1984, 6, 29 ) datetime.timedelta(8985, 55091, 206000) datetime.now() - datetime(1984, 6, 29 ) datetime.timedelta(8985, 55094, 198000) # my age... |
timedelta(天[,秒[,微秒[,毫秒[,分钟[,小时[,周]]]]]]])
如果您不想使用日期时间(例如,如果您的Python已经老了而您没有该模块),则可以使用时间模块。
1 2 3 4 5 | s ="Mon, 17 Nov 2008 01:45:32 +0200" import time import email.utils # Using email.utils means we can handle the timezone. t = email.utils.parsedate_tz(s) # Gets the time.mktime 9-tuple, plus tz d = time.time() - time.mktime(t[:9]) + t[9] # Gives the difference in seconds. |
从Python 3.2开始,如果提供了
1 2 3 4 5 6 7 | #!/usr/bin/env python3 from datetime import datetime, timezone, timedelta s ="Mon, 17 Nov 2008 01:45:32 +0200" birthday = datetime.strptime(s, '%a, %d %b %Y %H:%M:%S %z') age = (datetime.now(timezone.utc) - birthday) / timedelta(1) # age in days print("%.0f" % age) |
在较旧的Python版本中,可以使用正确版本的@Tony Meyer的答案:
1 2 3 4 5 6 7 8 | #!/usr/bin/env python import time from email.utils import parsedate_tz, mktime_tz s ="Mon, 17 Nov 2008 01:45:32 +0200" ts = mktime_tz(parsedate_tz(s)) # seconds since Epoch age = (time.time() - ts) / 86400 # age in days print("%.0f" % age) |
两个代码示例都产生相同的结果。
谢谢你们,我最终得到了以下内容:
1 2 3 4 | def getAge( d ): """ Calculate age from date""" delta = datetime.now() - datetime.strptime(d,"%a, %d %b %Y %H:%M:%S +0200") return delta.days + delta.seconds / 86400.0 # divide secs into days |
赠送:
1 2 | >>> getAge("Mon, 17 Nov 2008 01:45:32 +0200") 78.801319444444445 |