2015-09-09 2 views
0

У меня есть случай пользователя, что мне всегда нужен календарь без скачка, какой бы ни был год високосного года или нет. Я хочу построить 6-часовой список DATETIME за 2000 год, например:Как создать список невидимых дат-дней в python?

import datetime 
import pandas as pa 

tdelta = datetime.timedelta(hours=6) 
dt = datetime.datetime(2000,1,1,0,) 
ts = [dt+i*tdelta for i in range(1460)] 
pa.DatetimeIndex(ts) 

С помощью этого блока кода, я получаю результат:

DatetimeIndex(['2000-01-01 00:00:00', '2000-01-01 06:00:00', 
       '2000-01-01 12:00:00', '2000-01-01 18:00:00', 
       '2000-01-02 00:00:00', '2000-01-02 06:00:00', 
       '2000-01-02 12:00:00', '2000-01-02 18:00:00', 
       '2000-01-03 00:00:00', '2000-01-03 06:00:00', 
       ... 
       '2000-12-28 12:00:00', '2000-12-28 18:00:00', 
       '2000-12-29 00:00:00', '2000-12-29 06:00:00', 
       '2000-12-29 12:00:00', '2000-12-29 18:00:00', 
       '2000-12-30 00:00:00', '2000-12-30 06:00:00', 
       '2000-12-30 12:00:00', '2000-12-30 18:00:00'], 
       dtype='datetime64[ns]', length=1460, freq=None, tz=None) 

Однако я хочу Февральский иметь 28 дней, и, таким образом, последний элемент вывода должен быть «2000-12-31 18:00:00», есть ли способ сделать это с помощью python? Благодаря!!

+0

Я надеюсь, что они не хотят, день недели для данной даты в этом странном расположении. Если нет, вы всегда можете использовать не високосный год, который начинается в тот же день недели, что и 2000. –

+0

как вы хотите использовать список позже? Каков контекст? Даже если вы создадите список со смежными '2000-02-28 18: 00: 00',' 2000-03-01 00: 00: 00' записей; разница составляет более 24 часов, если вы используете тип данных datetime64 [ns] '. Большинство библиотек, работающих с датами в Python, принимают пролептивный григорианский календарь. Вероятно, вам следует избегать типа 'datetime', если вам нужен не-григорианский календарь, иначе вы должны бороться с ним на каждом шаге, чтобы получить желаемые результаты в вашем случае. – jfs

ответ

0

Все, что вам нужно сделать, это проверить атрибуты .month и .day для экземпляра datetime. Так просто вставить условие, которое проверяет:

  1. if month == 2
  2. if day == 2

Если оба условия true, вы не добавить его в список.

Чтобы сделать его более описательным:

ts = [] 
for i in range(1460): 
    x = dt + i * tdelta  
    if x.month == 2 and x.day == 29: 
     continue 

    ts.append(x) 
Смежные вопросы