给定特定格式的日期,我如何确定以月为单位的年龄?

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('/'),​​然后以这种方式操作列表的每个索引。这种方式意味着您可以单独使用日/月/年来计算必要的值。

【讨论】:

以上是关于给定特定格式的日期,我如何确定以月为单位的年龄?的主要内容,如果未能解决你的问题,请参考以下文章

以 YYYYMMDD 格式计算给定出生日期的年龄

如何使用 Oracle 以年、月和日为单位获取年龄

给定出生日期的年龄(以年为单位)

减去日期时间以获得以月为单位的增量[重复]

比较特定时间间隔的不同格式的纪元日期

PHP 另一种计算年龄的方法,给定MySQL日期格式