Как добавить длинную ценность в календарь?
Метод добавления календаря в 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);