从String中获取适当的小时值

时间:2012-01-18 20:54:45

标签: java time

我需要从时间字符串中获取hours的正确值。以下是示例代码:

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

问题在于,对于此示例,hours等于1而不是10.另一个示例,使用startTime = "01:00",则hours等于0而不是1。我能否正确地将小时数确定为字符串中的整数?

5 个答案:

答案 0 :(得分:7)

String[] hm = startTime.split(":");

hm[0]有小时部分,hm[1]有分钟。

答案 1 :(得分:1)

你只是获得了字符串的第一个字符,试试startTime.substring(0, 2),虽然可能是一种不那么脆弱的方法(如果你的时间字符串并不总是有两个数字指定小时值,你可以使用常规表达式:^(\\d+):并提取匹配的文本

答案 2 :(得分:0)

String startTime = "10:00";
System.out.println(startTime.substring(0, startTime.indexOf(':')));

答案 3 :(得分:0)

substring()方法的第一个参数是开始索引,所以实际上你在代码中说的是从零到1的子字符串,如果你应该使用

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

您可以使用SimpleDateFormat之类的其他方式将两个字符串解析为Date,然后使用日期帮助方法比较两个日期,例如after()before()或{{1 }}

equal()

答案 4 :(得分:0)

如果你最终用这个做了Time of stuff,我建议使用JDKs 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 ) );
    }
}