Как добавить длинные значения в календарь? - PullRequest
11 голосов
/ 10 августа 2010

Метод добавления календаря в Java принимает целое число в качестве ввода

int secs = 3;
cal.add(Calendar.SECOND, secs);

Но что, если секунды имеют тип Long.

long secs = 3

Там довольноЕсть несколько возможностей, таких как добавление секунд итеративно, но каковы другие варианты?

Ответы [ 5 ]

16 голосов
/ 10 августа 2010

Если значение, сохраненное в long sec, меньше или равно Integer.MAX_VALUE, вы можете привести к int:

cal.add(Calendar.SECOND, (int) sec));

Если значение меньше или равно Long.MAX_VALUE / 1000, вы можете преобразовать секунды в миллисекунды и использовать другой подход:

cal.setTimeInMillis(cal.getTimeInMillis() + (sec*1000));
7 голосов
/ 10 августа 2010

Если значение в секундах не слишком велико, чтобы поместиться в целое число, cast .

long secs = 3;
cal.add(Calendar.SECOND, (int) secs);

Но я настоятельно рекомендую вам использовать joda time вместо API Java-календаря.

1 голос
/ 10 августа 2010

Преобразуйте секунды, например, в дни, разделив их на 86400, затем добавьте дни и оставшиеся секунды.Вам нужно это сделать с умом, поскольку даже после деления на 86400 результат может быть больше целого.

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

0 голосов
/ 13 февраля 2018

если ваш номер большой, одна идея состоит в том, что вы делаете это в TOW TIME add ()

MaxInt:  2147483647
MaxLong: 9223372036854775807

следовательно

cal.add(Calendar.SECOND, secs / 1000000000);
cal.add(Calendar.SECOND, secs % 1000000000);
0 голосов
/ 10 августа 2010

Afaik календарь хранит значения в виде целых чисел внутри, поэтому нет никакого способа вписать в него длинное.Поправьте меня, если я ошибаюсь, но это то, что я прочитал из Java-календаря .Вы должны преобразовать свои секунды в дни или около того, чтобы получить то, что вы хотите.

...