Как добавить длинную ценность в календарь?

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

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

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

long secs = 3

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

Ответ 1

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

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

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

cal.setTimeInMillis(cal.getTimeInMillis() + (sec*1000));

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

MaxInt:  2147483647
MaxLong: 9223372036854775807

поэтому

cal.add(Calendar.SECOND, secs / 1000000000);
cal.add(Calendar.SECOND, secs % 1000000000);