У меня есть значение года и день года, и я хотел бы преобразовать его в дату (день/месяц/год).
Вопрос Python: год и день года на сегодняшний день?
Ответы (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
что такое модуль
mx
? что это добавляет к простому решению с datetime и timedelta?
- person MrFuppes; 13.01.2021
В данном случае не так много. mx.DateTime имеет гораздо больше методов, которые можно использовать при необходимости.
- person Use Me; 15.01.2021
хорошо, может быть, вы могли бы добавить ссылку на документы модуля, репозиторий исходного кода и т. д.
- person MrFuppes; 15.01.2021
person
schedule
Чем это проще, чем ответ SilentGhost?
- person GreenMatt; 27.09.2012
@GreenMatt: это не включает в себя помещение чисел в строку и последующий анализ этой строки.
- person Ignacio Vazquez-Abrams; 27.09.2012
Это действительно было предназначено для Мино; Думаю, мне следовало написать @Mino в комментарии, извините. Это правда, что этот метод не требует преобразования чисел в строку; однако, по моему опыту, вы, по крайней мере, с равной вероятностью начнете со строки. Более того, два вызова и арифметическая операция сложнее, чем один вызов IMO. (Конечно, количество звонков будет зависеть от необходимых конверсий.)
- person GreenMatt; 28.09.2012
Я проголосовал за этот ответ, потому что он также работает для десятичных дней. Я отправил редактирование, чтобы добавить это.
- person Jeff Ellen; 12.05.2018
person
schedule
Кажется, это прямо противоположно тому, что задает вопрос.
- person fhdrsdg; 01.06.2018