我需要从时间字符串中获取hours
的正确值。以下是示例代码:
String startTime = "10:00";
int hours = Integer.valueOf(startTime.substring(0,1));
问题在于,对于此示例,hours
等于1而不是10.另一个示例,使用startTime = "01:00"
,则hours
等于0而不是1。我能否正确地将小时数确定为字符串中的整数?
答案 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的子字符串,如果你应该使用
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 ) );
}
}