Из docs :
object.__div__(self, other) object.__truediv__(self, other)
Этими методами реализуется оператор деления (/). Метод
blockquote>__truediv__()
используется, когда действует__future__.division
, в противном случае используется__div__()
. Если определен только один из этих двух методов, объект не будет поддерживать деление в альтернативном контексте; TypeError будет поднят вместо этого.И здесь :
Будущий оператор является директивой для компилятора, что конкретный [ python] должна быть скомпилирована с использованием синтаксиса или семантики, которые будут доступны в ... будущей версии Python. Будущий оператор предназначен для облегчения перехода на будущие версии Python, которые вносят несовместимые изменения в язык. Он позволяет использовать новые функции перед выпуском, в котором эта функция становится стандартной.
future_statement: from __future__ import feature
Функции, распознаваемые Python 2.x, - это unicode_literals, print_function, absolute_import, division, generators, nested_scopes и with_statement
blockquote>Теперь некоторые тесты:
~$ python2.7 Python 2.7.6 (v2.7.6:3a1db0d2747e, Nov 10 2013, 00:42:54) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> 3/2 1 >>> exit() ~$ python3.2 Python 3.2.3 (v3.2.3:3d0686d90f55, Apr 10 2012, 11:25:50) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> 3/2 1.5
Итак, вы видите, что действие оператора
/
изменилось на python 3.x. Вы также можете увидеть это в следующем примере:class Dog(object): def __div__(self, other): print("__div__ called") def __truediv__(self, other): print("__truediv__ called") Dog() / Dog() --output:-- ~/python_programs$ python2.7 myprog.py __div__ called ~/python_programs$ python3.4 myprog.py __truediv__ called
Поскольку
__truediv__
не вызывается оператором/
в python 2.x, переопределяя__truediv__
в python 2.x не имеет никакого эффекта.PEP 238 - PEP 238 -- Changing the Division Operator We propose the following transitional measures: - Classic division will remain the default in the Python 2.x series; true division will be standard in Python 3.0. - The // operator will be available to request floor[, i.e. integer,] division unambiguously. - The future division statement, spelled "from __future__ import division", will change the / operator to mean true division throughout the [program]
Теперь посмотрите, что здесь происходит:
from __future__ import division class Dog(object): def __div__(self, other): print("__div__ called") def __truediv__(self, other): print("__truediv__ called") Dog() / Dog() --output:-- ~/python_programs$ python2.7 myprog.py __truediv__ called ~/python_programs$ python3.4 myprog.py __truediv__ called
Теперь вы получаете эффект python3.x для оператора
/
в python 2.x. Итак, теперь вы можете переопределить__truediv__
, чтобы оператор/
выполнял то, что вы хотите.Обратите внимание: если вы хотите, чтобы целочисленное деление в python 3.x, т. Е.
3/2 => 1
, тогда вам нужно используйте оператор//
, который реализуется__floordiv__
. Аналогично, если вы выполняетеfrom __future__ import division
в python 2.x, то для получения целочисленного деления вам необходимо использовать оператор//
; и если вы хотите переопределить оператор//
в классе, вам нужно реализовать__floordiv__
.
Период имеет конструктор, который принимает два ReadableInstant
экземпляра :
Period diff = new Period(start, end);
(ReadableInstant
- интерфейс, реализованный DateTime
, а также другими классами.)
Это помогает? http://joda-time.sourceforge.net/key_period.html Показан пример ниже
DateTime start = new DateTime(2004, 12, 25, 0, 0, 0, 0);
DateTime end = new DateTime(2006, 1, 1, 0, 0, 0, 0);
// period of 1 year and 7 days
Period period = new Period(start, end);
// calc will equal end
DateTime calc = start.plus(period);
// able to calculate whole days between two dates easily
Days days = Days.daysBetween(start, end);
Я думаю, что вы можете создать Period
используя этот конструктор, который принимает два DateTime
объекта.