Java возвращает BigInteger из строки

Я генерирую число с даты, я использую Integer.parseInt (myDateNumberString).

Моя проблема в том, что если число будет слишком большим, я выдаст ошибку.

public Integer currentDate(){
        String current_date = new SimpleDateFormat("yyyyMMddHHmm").format(Calendar.getInstance().getTime());
        //int _current_date = Integer.parseInt(current_date); // Error, too big number
        int _current_date = new BigInteger(current_date).intValue();
        return _current_date; // Error, output: -51212897
    }

Я хочу получить ценность как 201812250203 Если мой формат даты без mm, это нормально, но мне нужно его объявить.

Используйте другой тип данных, чем int. Прямо сейчас вы создаете объект BigInteger, а затем сразу конвертируете его в int, что представляет собой много фейерверков, чтобы просто разобрать current_date на int.

GBlodgett 24.12.2018 20:07

Вы можете использовать длинный?

KevinO 24.12.2018 20:07

@KevinO тот же результат с Long

Ajie Kurniyawan 24.12.2018 20:08
getTime возвращает long. Я не уверен, что вы пытаетесь сделать с intValue, но результат getTime почти наверняка то, что вам нужно, если вы хотите числовое представление даты.
Robert Harvey 24.12.2018 20:10

Почему бы не использовать реальный объект, предназначенный для хранения даты, а не просто числового значения?

GBlodgett 24.12.2018 20:10

Почему бы просто не сделать public long currentDate() { return Calendar.getInstance().getTimeInMillis(); }. Зачем вы вообще конвертируете этот формат в int? Почему бы просто не сохранить его как строку?

Chris Stillwell 24.12.2018 20:12

Возможно, вы сможете сообщить нам о проблеме действительный, которую пытаетесь решить, а не о своей неудачной попытке ее решить. Тот факт, что дата не помещается в int, является проблемой, которую вы пытаетесь решить.

Robert Harvey 24.12.2018 20:13

@All, мне нужен тип значения Integer для интеграции моих данных.

Ajie Kurniyawan 24.12.2018 20:15

Недостаточно информации о вашей проблеме. Вы можете показать нам еще код?

Robert Harvey 24.12.2018 20:18

@AjieKurniyawan, но Зачем вам нужно целое число для хранения отформатированной отметки времени? Можете ли вы изменить функцию, в которую вы пытаетесь передать это целочисленное значение?

Chris Stillwell 24.12.2018 20:19

почему вы не разрезаете на несколько частей после преобразования часть за частью

hamid 24.12.2018 20:33

К вашему сведению, ужасно неприятные старые классы даты и времени, такие как java.util.Date, java.util.Calendar и java.text.SimpleDateFormat, теперь являются наследие, вытесненными классами java.time, встроенными в Java 8 и новее. См. Руководство от Oracle.

Basil Bourque 24.12.2018 20:38

201812250203 не может поместиться в Integer, поэтому вы просите невозможное. При этом я согласен с другими, что вы должны использовать правильный объект даты и времени, а не Integer, например LocalDateTime, ZonedDateTime или Instant. Я тоже рекомендую вам избегать класса SimpleDateFormat. Это не только давно устарело, но и доставит много хлопот. Сегодня у нас намного лучше в java.time, современный API даты и времени Java.

Ole V.V. 27.12.2018 11:43
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
13
549
2

Ответы 2

Вы можете использовать BigInteger number = new BigInteger(string);, который анализирует данную строку как BigInteger.

документы говорят:

Constructs a new BigInteger by parsing value. The string representation consists of an optional plus or minus sign followed by a non-empty sequence of decimal digits. Digits are interpreted as if by Character.digit(char,10).

BigInteger - отвлекающий маневр.
Robert Harvey 24.12.2018 20:11

Основываясь на комментариях, которые предполагают, что подход OP неверен, да. Однако OP специально спросил, как разобрать String на BigInteger, и этот ответ предоставляет эту информацию. Если бы OP спросил: «Как лучше обрабатывать временные метки», этот ответ был бы неуместным.

spork 24.12.2018 21:12

Измените тип возвращаемого значения метода на long, а также возвращаемую переменную:

Обновлено: избавьтесь от метода .intValue () и измените возвращаемый тип метода на BigInteger, а также переменную.

public static void main(String[] args) {
    System.out.println(currentDate());
}

public static BigInteger currentDate() {
    String current_date = new SimpleDateFormat("yyyyMMddHHmm").format(Calendar.getInstance().getTime());
    // int _current_date = Integer.parseInt(current_date);
    BigInteger _current_date = new BigInteger(current_date);
    return _current_date;
}

К вашему сведению, ужасно неприятные старые классы даты и времени, такие как java.util.Date, java.util.Calendar и java.text.SimpleDateFormat, теперь являются наследие, вытесненными классами java.time, встроенными в Java 8 и новее. См. Руководство от Oracle.

Basil Bourque 24.12.2018 20:38

Другие вопросы по теме