如何将年份和年份转换为日期?

问题描述 投票:0回答:6

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

python date julian-date
6个回答
120
投票
datetime.datetime(year, 1, 1) + datetime.timedelta(days - 1)

36
投票
>>> import datetime
>>> datetime.datetime.strptime('2010 120', '%Y %j')
datetime.datetime(2010, 4, 30, 0, 0)
>>> _.strftime('%d/%m/%Y')
'30/04/2010'

8
投票

可以使用 toordinal()

 类的 
fromordinal()
date
 函数:

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

6
投票

因为现在很常见,所以有一个

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

pandas DataFrame 变体:

df = pd.DataFrame({"year": [2022, 2024], "doy": [365, 366]})
df["date"] = pd.to_datetime(df["year"], format="%Y") + pd.to_timedelta(df["doy"]-1, unit="D")

df
Out[4]: 
   year  doy       date
0  2022  365 2022-12-31
1  2024  366 2024-12-31

0
投票

使用 mx.DateTime 模块获取日期类似于上面使用

datetime
timedelta
提出的方法。即:

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

因此,鉴于您知道年份(例如 2020)和 doy(一年中的某一天,例如 234),那么:

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

返回

2020-08-21 00:00:00.00

mx.DateTime 库的优点是具有许多有用的功能。根据其主页中的描述:

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

-1
投票
>>>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)
© www.soinside.com 2019 - 2024. All rights reserved.