【问题标题】:How to convert Year and Day of Year to Date?Python 问题:迄今为止的年份和日期?
【发布时间】:2011-01-26 12:28:58
【问题描述】:

我有一个年份值和一年中的某一天,并想转换为日期(日/月/年)。

【问题讨论】:

    标签: python date julian-date


    【解决方案1】:
    datetime.datetime(year, 1, 1) + datetime.timedelta(days - 1)
    

    【讨论】:

    • 这怎么比 SilentGhost 的回答简单?
    • @GreenMatt:它不涉及将数字放入字符串然后解析该字符串。
    • 这真的是为 Mino 设计的;我想我应该在评论中加上“@Mino”,抱歉。确实,这种方法不需要将数字转换为字符串;但是,根据我的经验,您至少同样可能以字符串开头。更重要的是,两次调用和一次算术运算比一次调用 IMO 更复杂。 (当然,调用次数取决于所需的任何转化次数。)
    • 我赞成这个答案,因为它也适用于小数天。我提交了一个编辑来添加它。
    【解决方案2】:
    >>> import datetime
    >>> datetime.datetime.strptime('2010 120', '%Y %j')
    datetime.datetime(2010, 4, 30, 0, 0)
    >>> _.strftime('%d/%m/%Y')
    '30/04/2010'
    

    【讨论】:

      【解决方案3】:

      可以使用date 类的toordinal()fromordinal() 函数:

      from datetime import date
      date.fromordinal(date(year, 1, 1).toordinal() + days - 1)
      

      【讨论】:

        【解决方案4】:

        因为现在很常见,所以 pandas 选项,使用带有指定单位和原点的 pd.to_datetime

        import pandas as pd
        
        day, year = 21, 2021
        
        print(pd.to_datetime(day-1, unit='D', origin=str(year)))
        # 2021-01-21 00:00:00
        

        【讨论】:

          【解决方案5】:
          >>>import datetime
          >>>year = int(input())
          >>>month = int(input())
          >>>day = int(input())
          data = datetime.datetime(year,month,day)
          daynew = data.toordinal()
          yearstart = datetime.datetime(year,1,1)
          day_yearstart = yearstart.toordinal()
          print ((daynew-day_yearstart)+1)
          

          【讨论】:

          • 这似乎与问题所要求的完全相反
          【解决方案6】:

          使用 mx.DateTime 模块获取日期类似于上面使用datetimetimedelta 提出的建议。即:

          import mx.DateTime as dt 
          date = dt.DateTime(yyyy,mm,dd) + dt.DateTimeDeltaFromDays(doy-1)
          

          因此,假设您知道年份(例如 2020 年)和日期(一年中的某天,例如 234),那么:

          date = dt.DateTime(2020,1,1) + dt.DateTimeFromDays(233) 
          

          返回

          2020-08-21 00:00:00.00
          

          mx.DateTime 库的优势在于它具有许多有用的功能。根据其homepage中的描述:

          • 以几乎无缝的方式解析日期/时间字符串值。
          • 提供与许多不同的替代日期/时间之间的转换例程 存储格式。
          • 包括一个易于使用的 C API,它使 集成轻而易举。
          • 快速、高效、准确。
          • 格鲁吉亚和儒略历支持。
          • 有效日期范围广泛(包括 B.C. 日期)。
          • 稳定、健壮且便携(mxDateTime 已存在近 15 年 现在)。
          • 与 Python 的时间和日期时间模块完全互操作。

          【讨论】:

          • mx 模块是什么?这对使用 datetime 和 timedelta 的简单解决方案有什么好处?
          • 在这种情况下不多。 mx.DateTime 有更多方法可以在需要时使用。
          • 好的,也许您可​​以添加指向模块文档、源代码仓库等的链接。
          猜你喜欢
          • 1970-01-01
          • 2014-03-07
          • 2015-06-21
          • 1970-01-01
          • 1970-01-01
          • 2013-03-06
          • 1970-01-01
          • 2017-05-25
          • 1970-01-01
          相关资源
          最近更新 更多