DOY (Day Of the Year, or DayNumber)は日本ではあまり使われないようだが、ある日付がその年の1月1日から数えて何日目にあたるかを示す日付の通し番号であり、1-366の値を取る。別途「年」を表す記号と合わせて製品の製造日情報などで使われる事が多いと思われる。このDOYから一般の日付、Dateに変換する方法を探したがそのものズバリは見つからなかったので備忘録を兼ねて記す。
DOYはPythonでは Day of the year as a decimal number [001,366] という事でPythonのclass time.struct_timeに存在しAttributeはtm_ydayとなっている。strftime等で扱う場合のDirectiveは%jとなる。
例えば年番号: 19、DOY: 275が与えられた場合は以下の様にstrptimeで入力し、strftimeで形式を指定して任意の日付フォーマットで書き出せる。2019年のDOY275が10月2日であると分かる。
import time
ddd=time.strptime("19 275","%y %j")
print (ddd)
time.struct_time(tm_year=2019, tm_mon=10, tm_mday=2, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=275, tm_isdst=-1)
from time import strftime
strftime("%d/%m/%y", ddd)
'02/10/19'
追記
その後、こういうのを見つけてしまいました。
datetime.datetime(year, 1, 1) + datetime.timedelta(days - 1)
上の例の year=2019, days = 275 の結果は
datetime.datetime(2019, 10, 2, 0, 0)
となります。書式指定して書き出すなら手間は変わらないかもしれませんがシンプルですね。
参考URL
https://docs.python.org/2/library/time.html
https://stackoverflow.com/questions/2427555/python-question-year-and-day-of-year-to-date