Вопрос Python: год и день года на сегодняшний день?

У меня есть значение года и день года, и я хотел бы преобразовать его в дату (день/месяц/год).


person Mino    schedule 11.03.2010    source источник


Ответы (5)


toordinal() и fromordinal() можно использовать функции класса date:

from datetime import date
date.fromordinal(date(year, 1, 1).toordinal() + days - 1)
person sth    schedule 11.03.2010

так как в наши дни довольно распространен вариант 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
person MrFuppes    schedule 13.01.2021

Использование модуля mx.DateTime для получения даты аналогично тому, что было предложено выше с использованием datetime и timedelta. А именно:

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 в том, что она имеет множество полезных функций. Согласно описанию на его домашней странице:

  • Анализирует строковые значения даты/времени практически бесшовным способом.
  • Предоставляет процедуры преобразования в и из многих различных альтернативных форматов хранения даты/времени.
  • Включает простой в использовании C API, который упрощает интеграцию.
  • Быстрый, экономичный, точный.
  • Поддержка грузинского и юлианского календарей.
  • Широкий диапазон допустимых дат (включая даты до нашей эры).
  • Стабильный, надежный и портативный (mxDateTime существует уже почти 15 лет).
  • Полностью взаимодействует с модулями времени и даты и времени Python.
person Use Me    schedule 17.11.2020
comment
что такое модуль mx? что это добавляет к простому решению с datetime и timedelta? - person MrFuppes; 13.01.2021
comment
В данном случае не так много. mx.DateTime имеет гораздо больше методов, которые можно использовать при необходимости. - person Use Me; 15.01.2021
comment
хорошо, может быть, вы могли бы добавить ссылку на документы модуля, репозиторий исходного кода и т. д. - person MrFuppes; 15.01.2021

person    schedule
comment
Чем это проще, чем ответ SilentGhost? - person GreenMatt; 27.09.2012
comment
@GreenMatt: это не включает в себя помещение чисел в строку и последующий анализ этой строки. - person Ignacio Vazquez-Abrams; 27.09.2012
comment
Это действительно было предназначено для Мино; Думаю, мне следовало написать @Mino в комментарии, извините. Это правда, что этот метод не требует преобразования чисел в строку; однако, по моему опыту, вы, по крайней мере, с равной вероятностью начнете со строки. Более того, два вызова и арифметическая операция сложнее, чем один вызов IMO. (Конечно, количество звонков будет зависеть от необходимых конверсий.) - person GreenMatt; 28.09.2012
comment
Я проголосовал за этот ответ, потому что он также работает для десятичных дней. Я отправил редактирование, чтобы добавить это. - person Jeff Ellen; 12.05.2018

person    schedule
comment
Кажется, это прямо противоположно тому, что задает вопрос. - person fhdrsdg; 01.06.2018