python как преобразовать даты дат в десятичные годы

Я ищу способ конвертировать объекты datetime в десятичный год. Ниже приведен пример

>>> obj = SomeObjet() >>> obj.DATE_OBS datetime.datetime(2007, 4, 14, 11, 42, 50) 

Как преобразовать datetime.datetime (2007, 4, 14, 11, 42, 50) в десятичные годы? Из этого формата dd / mm / yyyy в этот вид формата yyyy.yyyy

4 Solutions collect form web for “python как преобразовать даты дат в десятичные годы”

 from datetime import datetime as dt import time def toYearFraction(date): def sinceEpoch(date): # returns seconds since epoch return time.mktime(date.timetuple()) s = sinceEpoch year = date.year startOfThisYear = dt(year=year, month=1, day=1) startOfNextYear = dt(year=year+1, month=1, day=1) yearElapsed = s(date) - s(startOfThisYear) yearDuration = s(startOfNextYear) - s(startOfThisYear) fraction = yearElapsed/yearDuration return date.year + fraction 

Демо-версия:

 >>> toYearFraction(dt.today()) 2011.47447514 

Этот метод, вероятно, является точным с точностью до второго (или часа, когда действуют дневные сбережения или другие странные региональные вещи). Он также работает правильно во время прыжков. Если вам требуется решительное разрешение (например, из-за изменений в вращении Земли), вам лучше обратиться к сетевому сервису.

Я предполагаю, что вы используете это для сравнения значений datetime. Для этого, пожалуйста, используйте объекты timedelta вместо того, чтобы переустанавливать колесо.

Пример:

 >>> from datetime import timedelta >>> from datetime import datetime as dt >>> d = dt.now() >>> year = timedelta(days=365) >>> tomorrow = d + timedelta(days=1) >>> tomorrow + year > d + year True 

Если по какой-то причине вам действительно нужны десятичные годы, объекты datetime object strftime() могут дать вам целочисленное представление дня года, если задано значение %j – если это то, что вы ищете, см. Ниже простой пример (только при разрешении 1 день):

 >>> from datetime import datetime >>> d = datetime(2007, 4, 14, 11, 42, 50) >>> (float(d.strftime("%j"))-1) / 366 + float(d.strftime("%Y")) 2007.2814207650274 

Это немного проще, чем другие решения:

 import datetime def year_fraction(date): start = datetime.date(date.year, 1, 1).toordinal() year_length = datetime.date(date.year+1, 1, 1).toordinal() - start return date.year + float(date.toordinal() - start) / year_length >>> print year_fraction(datetime.datetime.today()) 2016.32513661 

Обратите внимание, что это вычисляет долю в зависимости от начала дня, так что 31 декабря будет 0.997, а не 1.0.

Удивленный никто не упомянул об этом … но объекты datetime.timedelta которые являются результатом вычитания объектов datetime.datetime имеют метод разделения. Таким образом, вы можете использовать простую функцию

 from datetime import datetime def datetime2year(dt): year_part = dt - datetime(year=dt.year, month=1, day=1) year_length = datetime(year=dt.year+1, month=1, day=1) - datetime(year=dt.year, month=1, day=1) return dt.year + year_part/year_length 

где разделение между объектами datetime.timedelta .

  • Преобразование unixtime в объект datetime и обратно (пара функций преобразования времени, которые являются обратными)
  • Как преобразовать объект datetime.date в datetime.datetime в python?
  • Использование Python для подсчета количества рабочих дней в месяц?
  • Создание date2num matplotlib и num2date совершенных инверсий
  • Есть ли функция Python для определения того, в каком квартале года находится дата?
  • Получить объект даты в течение первого / последнего дня текущего года
  • как получить тот же день следующего месяца данного дня в python, используя дату и время
  • Есть ли модуль Python для определения месяца или дня в строке?
  •  
    Interesting Posts for Van-Lav

    режущие массивы в numpy / scipy

    Python: метакласс + обернутые методы + наследование = проблемы

    Страница администрирования Django не отображает таблицы базы данных (глава 06 djangobook)

    Как разбить фрейм данных на несколько кадров данных на основе столбцов

    Совместимость с ORB python opencv

    Как трехсторонние отношения «многие-ко-многим» в колбе-sqlalchemy

    mechanize python нажмите кнопку

    Создайте сегмент aa с заданным числом вершин и зацепите и опустошите все вершины в сегменте

    В этом случае модуль MySQLdb в python возвращает кодировку utf8 или unicode?

    Создать словарь из разделенных строк из списка строк

    В Python используйте «dict» с ключевыми словами или анонимными словарями?

    Как вы оберните представление стороннего приложения Django

    Определения рекурсивных переменных в Python и F # (возможно, OCaml тоже)

    Почему мне нужно дважды нажать Ctrl + D, чтобы закрыть stdin?

    Документ python с использованием Eclipse / Pydev

    Python - лучший язык программирования в мире.