如何解析格式的时间hh:mm:ss
,作为字符串输入以在java中仅获取整数值(忽略冒号)?
4 回答
根据 Basil Bourque 的评论,考虑到 Java 8 的新 API,这是此问题的更新答案:
String myDateString = "13:24:40";
LocalTime localTime = LocalTime.parse(myDateString, DateTimeFormatter.ofPattern("HH:mm:ss"));
int hour = localTime.get(ChronoField.CLOCK_HOUR_OF_DAY);
int minute = localTime.get(ChronoField.MINUTE_OF_HOUR);
int second = localTime.get(ChronoField.SECOND_OF_MINUTE);
//prints "hour: 13, minute: 24, second: 40":
System.out.println(String.format("hour: %d, minute: %d, second: %d", hour, minute, second));
评论:
- 由于 OP 的问题包含仅包含小时、分钟和秒(没有日期、月份等)的时间瞬间的具体示例,因此上面的答案仅使用LocalTime。如果要解析还包含天、月等的字符串,则需要LocalDateTime。它的用法与 LocalTime 的用法非常相似。
- 由于时间即时 int OP 的问题不包含有关时区的任何信息,因此答案使用日期/时间类的 LocalXXX 版本(LocalTime、LocalDateTime)。如果需要解析的时间字符串也包含时区信息,则需要使用ZonedDateTime 。
====== 下面是这个问题的旧(原始)答案,使用 Java8 之前的 API:=====
我很抱歉,如果我要让任何人不高兴,但我实际上会回答这个问题。Java API 非常庞大,我认为有时有人可能会错过它是正常的。
SimpleDateFormat 可能会在这里解决问题:
http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
它应该是这样的:
String myDateString = "13:24:40";
//SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");
//the above commented line was changed to the one below, as per Grodriguez's pertinent comment:
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
Date date = sdf.parse(myDateString);
Calendar calendar = GregorianCalendar.getInstance(); // creates a new calendar instance
calendar.setTime(date); // assigns calendar to given date
int hour = calendar.get(Calendar.HOUR);
int minute; /... similar methods for minutes and seconds
您应该注意的问题:
您传递给 SimpleDateFormat 的模式可能与我的示例中的模式不同,具体取决于您拥有的值(是 12 小时格式或 24 小时格式等的小时数)。查看链接中的文档以获取有关此内容的详细信息
一旦你从你的字符串中创建了一个日期对象(通过 SimpleDateFormat),不要试图使用 Date.getHour()、Date.getMinute() 等。它们有时可能会起作用,但总的来说它们会产生不好的结果,因此现在已弃用。如上例所示,请改用日历。
有点冗长,但它是Java 中解析和格式化日期的标准方法:
DateFormat formatter = new SimpleDateFormat("HH:mm:ss");
try {
Date dt = formatter.parse("08:19:12");
Calendar cal = Calendar.getInstance();
cal.setTime(dt);
int hour = cal.get(Calendar.HOUR);
int minute = cal.get(Calendar.MINUTE);
int second = cal.get(Calendar.SECOND);
} catch (ParseException e) {
// This can happen if you are trying to parse an invalid date, e.g., 25:19:12.
// Here, you should log the error and decide what to do next
e.printStackTrace();
}
String time = "12:32:22";
String[] values = time.split(":");
这将花费您的时间并将其拆分到看到冒号的位置并将值放入数组中,因此在此之后您应该有 3 个值。
然后循环遍历字符串数组并转换每一个。(与Integer.parseInt
)
如果你想提取小时、分钟和秒,试试这个:
String inputDate = "12:00:00";
String[] split = inputDate.split(":");
int hours = Integer.valueOf(split[0]);
int minutes = Integer.valueOf(split[1]);
int seconds = Integer.valueOf(split[2]);