Из-за существования операторов сложения и вычитания перекрестного типа даты, времени и даты и времени я думаю, что это хорошо, если только они четко определены.
В настоящее время (2.7.2):
date = date + timedelta
date = date - timedelta
timedelta = date - date
datetime = datetime + timedelta
datetime = datetime - timedelta
timedelta = datetime - datetime
Я считаю, что для расширения также целесообразно:
timedelta = time - time
datetime = date + time
Я собирался также предложить следующее, но time
имеет очень конкретные минимальные и максимальные значения для hour
, minute
, second
и microsecond
, таким образом, требуя тихого переноса значений или возвращение другого типа:
time = time + timedelta
time = time - timedelta
Аналогичным образом, date
не может обработать timedelta
менее чем за один день, добавляемый к нему. Часто мне говорили просто использовать Duck Typing с Python , потому что таково намерение. Если это правда , то я бы предложил следующий завершенный интерфейс:
[date|datetime] = date + timedelta
[date|datetime] = date - timedelta
timedelta = date - date
[time|timedelta] = time + timedelta
[time|timedelta] = time - timedelta
timedelta = time - time
datetime = datetime + timedelta
datetime = datetime - timedelta
datetime = date + time
datetime = date - time
timedelta = datetime - datetime
timedelta = datetime - date
timedelta = timedelta + timedelta
timedelta = timedelta - timedelta
В этом случае, учитывая, что date
имеет потерю точности (для timedelta
с частичными днями), оно повышается до datetime
. Точно так же, учитывая случай, когда time
имеет потерю точности (для timedelta
, которые дают результат более одного дня или отрицательного времени), он повышается до timedelta
. Однако , мне не совсем комфортно с [time|timedelta]
. Это имеет смысл, учитывая остальную часть интерфейса из параллелизма и точности представлений, но я думаю, что было бы более элегантно просто перенести время на нужный час, таким образом, изменив все [time|timedelta]
на просто time
, но к сожалению, это оставляет нас с потерянной точностью.