Получить правильное значение часов из строки - PullRequest
2 голосов
/ 19 января 2012

Мне нужно получить правильное значение hours из строки времени. Вот пример кода:

String startTime = "10:00";
int hours = Integer.valueOf(startTime.substring(0,1));

Проблема в том, что для этого примера hours равно 1 вместо 10. Как другой пример, с startTime = "01:00", тогда hours равно 0 вместо 1. Как я могу правильно определить часы как целое число из строки?

Ответы [ 5 ]

7 голосов
/ 19 января 2012
String[] hm = startTime.split(":");

hm[0] имеет часть часа, а hm[1] имеет минуты.

1 голос
/ 19 января 2012

Вы получаете только первый символ строки, попробуйте startTime.substring(0, 2), хотя, возможно, менее хрупкий подход (на случай, если ваши строки времени не всегда имеют две цифры, указывающие значение часа, вы можете использовать регулярное выражение:^(\\d+): и извлечение совпавшего текста

0 голосов
/ 19 января 2012

Если в конечном итоге вы с этим справитесь, я бы рекомендовал использовать классы JDK DateFormat, Date и Calendar.

public class TimeFromStringTest {
    @Test
    public void simpleTest() {
        try {
            doTest( "10:00", 10, 0 );
            doTest( "10:10", 10, 10 );
            doTest( "23:58", 23, 58 );
            doTest( "1:01", 1, 1 );
            doTest( "24:61", 1, 1 );
        } catch ( ParseException e ) {
            fail( String.format( "unexpected exception %s", e ) );
        }
    }
    private void doTest( String candidate, int expectedHours, int expectedMins ) throws ParseException {
        DateFormat df = new SimpleDateFormat( "HH:mm" );
        Date result = df.parse( candidate );
        Calendar cal = Calendar.getInstance();
        cal.setTime( result );
        assertEquals( expectedHours, cal.get( Calendar.HOUR_OF_DAY ) );
        assertEquals( expectedMins, cal.get( Calendar.MINUTE ) );
    }
}
0 голосов
/ 19 января 2012

первым параметром метода substring() является начальный индекс, так что на самом деле вы говорили в своем коде, чтобы получить подстроку от нуля до единицы, которая равна 1, если вы должны использовать

  String startTime = "10:00";
  int hours = Integer.valueOf(startTime.substring(0,2));
  System.out.println(hours);

Вы можете использовать некоторые другие способы, такие как SimpleDateFormat, чтобы проанализировать обе строки до Date, а затем сравнить две даты, используя вспомогательные методы даты, такие как after(), before() или equal()

SimpleDateFormat formatter = new SimpleDateFormat("HH:mm")
Date date = formatter.parse("10:00");
system.out.println(date);
0 голосов
/ 19 января 2012
String startTime = "10:00";
System.out.println(startTime.substring(0, startTime.indexOf(':')));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...