3

我需要处理可能是也可能不是时间的字符串列表。当我收到时间时,需要将其从“HH:mm:ss”转换为处理前的毫秒数:

final String unknownString = getPossibleTime();    

final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
dateFormat.setLenient(false);
try {
    final Date date = dateFormat.parse(unknownString);
    //date.getTime() is NOT what I want here, since date is set to Jan 1 1970

    final Calendar time = GregorianCalendar.getInstance();
    time.setTime(date);

    final Calendar calendar = GregorianCalendar.getInstance();
    calendar.set(Calendar.HOUR_OF_DAY, time.get(Calendar.HOUR_OF_DAY));
    calendar.set(Calendar.MINUTE, time.get(Calendar.MINUTE));
    calendar.set(Calendar.SECOND, time.get(Calendar.SECOND));

    final long millis = calendar.getTimeInMillis();
    processString(String.valueOf(millis));
}
catch (ParseException e) {
    processString(unknownString);
}

这段代码有效,但我真的不喜欢它。异常处理特别难看。有没有更好的方法来完成这个而不使用像 Joda-Time 这样的库?

4

2 回答 2

2
public static long getTimeInMilliseconds(String unknownString) throws ParseException {

   DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
   String dateString = dateFormat.format(Calendar.getInstance().getTime());

   DateFormat timeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
   return timeFormat.parse(dateString + " " + unknownString).getTime();
}

无论您愿意,都可以在此方法之外处理 ParseException。即(“未提供时间信息”......或“未知时间格式”......等)

.getTime()以毫秒为单位返回时间。它是java.util.DateAPI 的一部分。

于 2013-06-12T14:42:30.160 回答
1

为什么不首先检查输入是否实际上是 HH:mm:ss 格式。您可以通过[0-9]?[0-9]:[0-9]?[0-9]:[0-9]?[0-9]首先尝试匹配输入到正则表达式来做到这一点,如果匹配,则将其视为日期,否则调用 processString(unknownString);

于 2013-06-12T14:42:35.047 回答