python повторных дней в датах B C (эквивалент месяца) - PullRequest
0 голосов
/ 16 марта 2020

Я бы хотел итерировать по дням (или лучше построить массив) даты B C, как я делаю с типичными датами:

from calendar import monthrange
import datetime

for y in range(2010, 2020):
  for m in range(1,13):
    for d in range(1, monthrange(y, m)[1]+1):
      print(datetime.date(year=y,month=m,day=d))

Я знаю, что это невозможно в чистом виде python библиотека даты и времени (из-за определения даты и времени), таким образом, я прошел через этот вопрос , заданный ранее, и понял, что может быть два основных варианта решения моей задачи:

  • проанализированный объект данных ( из datautil.date import parse) (выглядит устаревшим)
  • Объект Astropy (из времени импорта astropy.time)

Работа с объектом данных (имя пакета python3 равно python -dateutil (вместо datautil) и импорт немного отличается) меня смущает еще больше, поскольку мне кажется, что дата B C больше не сохраняется / или это совершенно другая библиотека:

from dateutil.parser import parse

parse(-200-01-01) # is an AD date object: datetime.datetime(200, 1, 1, 0, 0)
parse(u'200BC') # reports: ValueError: ('Unknown string format:', '200BC')

Говоря об астропии - единственное упоминание об отрицательных датах содержится в разделе FITS , но я абсолютно не знаю, как использовать объект. Документы очень редки, без примеров, и мне не удалось заставить его работать.

Мои ограниченные знания не позволяют мне найти что-либо в документации, если мой подход к созданию B C объект даты в python 3+ возможен, и если я каким-то образом могу перебирать здесь дни.

Единственный «обходной путь» (замена месячного диапазона), о котором я могу подумать, - это функция last_day_month, представленная JK в другом месте . Но сейчас, можете ли вы предложить какой-либо способ, как я могу построить диапазон дней и перебрать их?

1 Ответ

0 голосов
/ 16 марта 2020

Я мог бы найти способ, как действовать.

Существует библиотека python, называемая skyfield, которая может содержать даты B C (сохраненные как TT - земное время), может показаться Излишне использовать астрономическую библиотеку, но она подходит для моих нужд. Правильно отформатированный может быть показан в utc / gmt или других форматах ... (как написано в документации )

Это способ хранения даты B C:

from skyfield.api import load
ts = load.timescale()
t1 = ts.utc(-200,1,1)
print(t1.utc_strftime('%Y-%m-%d %H:%M'))

Выходы:

-200-01-01 00: 00

В сочетании с ответом JK , чтобы получить последний день месяца Я могу действовать очень схожим образом, как и с датами AD:

from calendar import monthrange
import datetime
from skyfield.api import load

ts = load.timescale()
for y in range(-200, -190):
  for m in range(1,13):
    for d in range(1, last_day_month(y, m)+1):  # this is JK function to find days in month
      print(ts.utc(y,m,d).utc_strftime('%Y-%m-%d %H:%M'))

Если нет никого, кто мог бы представить какой-либо другой (и более эффективный способ) способ повторения в днях в B C лет, я буду считать это решенным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...