2017-02-16 3 views
0

мой проект запрашивает у пользователя строку в форме hh: mm. Тогда мне нужно отделить чч: мм в часы и минуты, которые я думаю, что я сделалПутаница Java с hh: mm

String Hour = string.substring(0,2); 
String Minutes = string.substring(3,5); 

Теперь мне нужно, чтобы убедиться, что час от 5 < = час < 22. Но я не могу выполните равенство со строкой, поэтому я использовал parseInt, чтобы преобразовать его в int и выполнить равенство с ним. Но это приводит к снижению нулей, которые мне нужно сохранить в моем коде.

Как я идти об этом

+3

Javascript! = Java. (Я исправил тег вопроса для вас.) – nnnnnn

+0

Какой пример ввода, вы могли бы поделиться с нами? – FreedomPride

+0

Если вы используете эти данные в строковом формате после выполнения равенства, самым простым способом будет добавить '0' в течение нескольких часов и минут менее 10. – Rahul

ответ

0

Попробуйте посмотреть на Simple Date Format

String input= "05:00"; 
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); 
Date date = sdf.parse(input); 
+0

К сожалению, им новый для Java и еще не узнал об этом – Survivorr

+1

* Теперь мне нужно убедиться, что час от 5 <= час <22. * - не отвечает на это –

+1

Неудобные старые классы времени, такие как ['java. util.Date'] (https://docs.oracle.com/javase/8/docs/api/java/util/Date.html), ['java.util.Calendar'] (https://docs.oracle .com/javase/8/docs/api/java/util/Date.html) и 'java.text.SimpleTextFormat' теперь [legacy] (https://en.wikipedia.org/wiki/Legacy_system), вытеснены с помощью классов [java.time] (https://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html). –

0

Как вы просили parseInt попробовать

String line = "23:59"; 

    String arr [] = line.split(":"); 
    if (Integer.parseInt(arr[0]) < 5 || Integer.parseInt(arr[0]) >= 22) { 
     System.out.println("wrong hour"); 
    } 
0

String::split

Как правило, для разделения строк в детали, используйте String::split. См. Вопрос How to split a string in Java для большого обсуждения.

String[] parts = "07:11".split(":"); 

Arrays.toString (части): [07, 11]

Но я не рекомендовать этот подход в вашем случае. Читай дальше.

LocalTime

Java предлагает специально построенный класс для вас: LocalTime. Этот класс представляет собой время суток без даты и без часового пояса. Часы представляют собой единый общий 24-часовой день, который игнорирует аномалии, такие как Daylight Saving Time (DST).

Ваши данные, такие как 07:11, соответствуют стандарту ISO 8601. Классы java.time используют эти форматы по умолчанию при разборе или генерации строк, представляющих значения даты и времени. Поэтому нет необходимости указывать шаблон форматирования.

LocalTime localTime = LocalTime.parse("07:11"); 

Оттуда вы можете допросить часть часа или минуту.

int hourOfDay = localTime.getHour(); 
int minuteOfHour = localTime.getMinute(); 

Но ваша настоящая цель - сравнить время, чтобы узнать, находится ли он между 5:00 и 10:00. Например, это правда: 5 AM < 07:11 < 10 PM. Поэтому не нужно разрывать время на куски. Вместо этого сделайте сравнение более прямым и более самодокументируемым, используя класс LocalTime.

LocalTime start = LocalTime.of(5 , 0); // 5 AM = 05:00. 
LocalTime stop = LocalTime.of(22 , 0); // 10 PM = 22:00. 

Boolean isBetween = 
    (! localTime.isBefore(start)) 
    && 
    localTime.isBefore(stop) 
; 

См. Это code run live at IdeOne.com.

О том, что заявление сравнения:

  • Первая часть спрашивает: «Является ли наша цель либо точно в начале или после начала?».Более короткий способ задать вопрос: «Является ли наша цель не перед началом?». Если «не раньше», то логически это должно быть либо точно, либо после.
  • Вторая часть спрашивает, находится ли наша цель перед остановкой, а не «равно или раньше». Это означает, что мы используем подход Half-Open для определения промежутка времени. В Half-Open начало включительно в то время как окончание исключение. Это обычно используется в работе с датой. Я считаю, что использовать его последовательно на всей базе кода, а бизнес-логика устраняет большую часть путаницы и двусмысленности, которая возникает из-за промежутков времени.
Смежные вопросы