нашел время на основе даты и хочу преобразовать его из строки в int - PullRequest
0 голосов
/ 04 января 2019

Я хочу найти текущее время и минуты и затем преобразовать String в int, чтобы я мог их использовать.

Я пишу этот код, но Netbeans всегда показывает мне эту ошибку:

   Exception in thread "main" java.lang.NumberFormatException: For input string: "mm "
   at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:580)
    at java.lang.Integer.parseInt(Integer.java:615)
   t JavaApplication1.JavaApplication1.main(JavaApplication1.java:66)
   C:\Users\eleft\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53:

Java вернул: 1 BUILD FAILED (общее время: 0 секунд)

    //HOURS   --12 hour form
        Date date1 = new Date();
        String strDateFormat1 = "hh ";
        DateFormat dateFormat1 = new SimpleDateFormat(strDateFormat1);
        String formattedDate1= dateFormat1.format(date1);

        System.out.println("Current time of the day using Date - 12 hour format: " + formattedDate1);

        //MINUTES
        Date date2 = new Date();
        String strDateFormat2 = "mm ";
        DateFormat dateFormat2 = new SimpleDateFormat(strDateFormat2);
        String formattedDate2= dateFormat2.format(date);

        System.out.println("Current time of the day using Date - 12 hour format: " + formattedDate2+ "MINUTES");  


        int current_minutes=Integer.parseInt(strDateFormat2);    

        int current_hours=Integer.parseInt(strDateFormat1);

Ответы [ 3 ]

0 голосов
/ 04 января 2019

Как я понял, после строковых значений после них есть пробелы, сначала нужно использовать trim () , чтобы избавиться от них.Ваш код будет выглядеть так:

Date date1 = new Date();
    String strDateFormat1 = "hh ";
    DateFormat dateFormat1 = new SimpleDateFormat(strDateFormat1);
    String formattedDate1= dateFormat1.format(date1);

    System.out.println("Current time of the day using Date - 12 hour format: " + formattedDate1);

    //MINUTES
    Date date2 = new Date();
    String strDateFormat2 = "mm ";
    DateFormat dateFormat2 = new SimpleDateFormat(strDateFormat2);
    String formattedDate2= dateFormat2.format(date2);

    System.out.println("Current time of the day using Date - 12 hour format: " + formattedDate2+ "MINUTES");


    int current_minutes=Integer.parseInt(formattedDate2.trim());
    int current_hours=Integer.parseInt(formattedDate1.trim());
0 голосов
/ 04 января 2019

java.time

Чтобы получить текущий час в 12-часовом формате и текущую минуту часа в виде значений int:

LocalTime currentTime = LocalTime.now(ZoneId.of("Asia/Qatar"));

int currentHours = currentTime.get(ChronoField.HOUR_OF_AMPM);
int currentMinutes = currentTime.getMinute();

System.out.println("Current time of the day using LocalTime - 12 hour format: "
        + currentHours + " HOURS " + currentMinutes + " MINUTES");

Выход при работе только сейчас был:

Текущее время дня с использованием LocalTime - 12-часовой формат: 11 ЧАСОВ 52 МИНУТ

Пожалуйста, замените желаемый часовой пояс , куда я положилАзия / Катар.

currentTime.get(ChronoField.HOUR_OF_AMPM) дает вам час от 0 до 11. Если вы хотите 12 вместо 0, просто используйте ChronoField.CLOCK_HOUR_OF_AMPM вместо ChronoField.HOUR_OF_AMPM.

Что пошлонеправильно в вашем коде?

Сначала вы использовали старые классы даты и времени Date и SimpleDateFormat.Они плохо спроектированы и давно устарели, так что не делайте этого.Вместо этого я использую java.time, современный Java-интерфейс даты и времени.Вы, возможно, уже заметили, как это также значительно упрощает ваш код (в сочетании со следующим пунктом).

Во-вторых, вы форматировали часы и минуты только для их анализа.Это объезд.Не делайте этого.

В-третьих, как правильно указывают другие ответы, вы пытались проанализировать strDateFormat2, переменную, содержащую шаблон формата mm, вместо строки, содержащей число.Полученное вами сообщение об исключении For input string: "mm " пытается вам это сказать.Аналогично для часов.

В-четвертых, как правильно говорит Теджас Джагтап, Integer.parseInt откажется анализировать строку с завершающим пробелом.

Ссылка

Руководство по Oracle: Date Time , объясняющее, как использовать java.time, современный Java-интерфейс даты и времени.

0 голосов
/ 04 января 2019

Вы анализируете неправильную строку:

int current_minutes=Integer.parseInt(strDateFormat2);

int current_hours=Integer.parseInt(strDateFormat1);

должно быть

int current_minutes=Integer.parseInt(formattedDate2);

int current_hours=Integer.parseInt(formattedDate1);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...