【问题标题】:How to convert numbers to dates如何将数字转换为日期
【发布时间】:2020-05-12 15:17:52
【问题描述】:

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

【问题讨论】:

标签: python datetime integer number-formatting data-conversion


【解决方案1】:

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

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)

【讨论】:

    【解决方案2】:

    您可以使用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
    

    【讨论】:

      【解决方案3】:

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

      此外,就像CoryKramer 所做的那样,我们可以使用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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多