如何将数字转换为日期

How to convert numbers to dates

员工编号由年月和3位控制号组成,如果我们以今天的日期为准,如何知道他们工作的年数?员工1 201011003,员工2 200605015

您可以使用 datetime.strptime 将日期字符串读入 datetime 对象。通过减去两个 datetime 对象,你会得到一个 timedelta 对象,你可以用它来计算员工在那里的年数。

from datetime import datetime
def get_date(s):
    return datetime.strptime(s[:6], '%Y%m')

例子

>>> get_date('201011003')
datetime.datetime(2010, 11, 1, 0, 0)
>>> get_date('200605015')
datetime.datetime(2006, 5, 1, 0, 0)

根据您想要的精确度,您可以估算该员工在那里工作的年数,例如

def get_years(s):
    start = datetime.strptime(s[:6], '%Y%m')
    now = datetime.now()
    return (now - start).days / 365.25

>>> get_years('201011003')  
9.527720739219713
>>> get_years('200605015')
14.03148528405202

您可以像这样使用日期时间库:

from datetime import date

date_str = '201011003'
year = int(date_str[0:4])
month = int(date_str[4:6])
d = date(year, month, 1)

year_delta = (date.today() - d).days // 365
print(year_delta)

要获得非常准确的结果,我建议您使用 dateutil package。它包含一个名为 relativedelta 的超级强大功能,它将为您提供从您感兴趣的那一天起经过的年、月和日,考虑闰年(而不只是天数,因为 datetime.timedelta )。

此外,正如所做的那样,我们可以使用strptime函数从您拥有的员工代码中解析日期。

import datetime as dt
from dateutil.relativedelta import relativedelta


employee = '201011003'
date_joined = dt.datetime.strptime(employee[:6], '%Y%m')
result = relativedelta(dt.datetime.today(), date_joined)

print('The employee has been working for {} years, {} months and {} days'.format(
    result.years, result.months, result.days))

输出

The employee has been working for 9 years, 6 months and 11 days