给定特定格式的日期,我如何确定以月为单位的年龄?
Posted
技术标签:
【中文标题】给定特定格式的日期,我如何确定以月为单位的年龄?【英文标题】:Given a date in a specific format, how can I determine age in months? 【发布时间】:2013-06-11 09:12:58 【问题描述】:我有一个脚本,它以 2013 年 3 月 4 日的形式获取字符串。如何将其转换为可以用来确定日期年龄(以月为单位)的日期?我还希望能够将月份设为十进制形式(即 2.8 个月大)。
就编码而言,我完全不确定该怎么做。我读过不同的库可以做这样的事情,但我不确定哪个是最好的。
编辑:假设一个月有 30 天。这是我目前所拥有的:
import time
def ageinmonths( str )
return time.today() - time.strptime("3/4/2013", "%b %d %y")
【问题讨论】:
到目前为止你尝试过什么?datetime
模块是一个很好的起点。
docs.python.org/2/library/datetime.html
你如何定义一个月? 30 天还是按日历?如果某人在闰年的 2 月 28 日出生,他们会在两天后出生 0.0667 (1/29 + 1/31) 个月吗?
这在很大程度上取决于您如何计算“1 个月”。 1个月=30天?是日历翻页的时候吗?
我建议你使用 idle 或其他 Python shell 并输入诸如 time.today()
和 time.strptime("3/4/2013", "%b %d %y")
之类的表达式并与它们一起玩,看看会发生什么。然后import datetime
并做dir(datetime)
【参考方案1】:
类似这样的:
>>> from datetime import datetime
>>> from dateutil.relativedelta import relativedelta
>>> dt = datetime.strptime('3/4/2013','%m/%d/%Y')
>>> r = relativedelta(datetime.now(), dt)
>>> months = r.years * 12 + r.months + r.days/30
【讨论】:
【参考方案2】:编辑: 实现跨大西洋日期格式的终极和谐!
import datetime,locale
def transatlantic_age_in_months(datestring):
datefmt = locale.nl_langinfo(locale.D_FMT)
dob = datetime.datetime.strptime(datestring,datefmt[:-2]+'%Y')
dt = dob.today() - dob
return dt.days/30.
【讨论】:
编辑:这实际上比正确答案少了 1 个月。在“2013 年 3 月 4 日”的情况下,它给出 2.4 而不是 3.4 我是英国人 :) 只需将dd,mm,yy
更改为 mm,dd,yy
知道了!我将您的答案与上面给出的答案结合使用。【参考方案3】:
这是来自 kzh 的答案,但添加了发布者想要的小数。
from datetime import datetime
from dateutil.relativedelta import relativedelta
date = '3/4/2013'
dt = datetime.strptime(date,'%m/%d/%Y')
r = relativedelta(datetime.now(), dt)
months = r.years * 12 + r.months + r.days/30.
print months
>>>> 3.33333333333
【讨论】:
赞成您采纳我的答案并将其作为实际答案。大多数其他答案都不是pythonic。我见过的关于 Python 的最有价值的 cmets 之一来自我的一个老问题:“重写标准库提供的函数根本不是 Pythonic”。 ***.com/questions/1233539/…【参考方案4】:高级方法: 将您的日期转换为日期时间对象。调用 datetime.now()。减去。面条结果成几个月。
【讨论】:
【参考方案5】:我会使用 str.split('/'),然后以这种方式操作列表的每个索引。这种方式意味着您可以单独使用日/月/年来计算必要的值。
【讨论】:
以上是关于给定特定格式的日期,我如何确定以月为单位的年龄?的主要内容,如果未能解决你的问题,请参考以下文章