我想将String
个不同的表单转换为Date
格式。这是我目前的代码:
SimpleDateFormat sdf = new SimpleDateFormat("hhmma");
Date time = sdf.parse(string);
测试它,它将正确解析1030pm
等输入。但是,它不适用于830pm
或任何其他单个数字小时的输入。有没有办法解决?或者我必须为不同的DateFormat ("hmma")
长度使用不同的String
吗?
答案 0 :(得分:1)
你显然有一个没有约会的时间。 java.util.Date
类,尽管名称选择不当,但它代表日期和一个时间。
在Java 8及更高版本中,内置的java.time框架(Tutorial)提供了一个名为LocalTime
的时间类。正是你所需要的只有时间的价值。
如果小时可能没有填充前导零,但是分钟会,那么我建议在输入字符串的长度较短时简单地加前一个零。
String input = "834AM";
String s = null;
switch ( input.length () ) {
case 6:
s = input;
break;
case 5:
// Prepend a padded leading zero.
s = "0" + input;
break;
default:
// FIXME: Handle error condition. Unexpected input.
break;
}
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "hhmma" );
LocalTime localTime = formatter.parse ( s , LocalTime :: from );
System.out.println ( "Input: " + input + " → s: " + s + " → localTime: " + localTime );
跑步时。
输入:834AM→s:0834AM→localTime:08:34
另一方面,如果一个10以下的分钟数字是一个没有填充前导零的数字,我没有解决方案。在我看来,这将是不可能的模棱两可。例如,123AM
是01:23AM
还是12:03AM
?
提示:坚持ISO 8601格式,特别是24小时制和前导零。