从String转换为DateTime

时间:2015-10-16 10:46:36

标签: java date time

我想将String个不同的表单转换为Date格式。这是我目前的代码:

    SimpleDateFormat sdf =  new SimpleDateFormat("hhmma"); 
    Date time = sdf.parse(string);

测试它,它将正确解析1030pm等输入。但是,它不适用于830pm或任何其他单个数字小时的输入。有没有办法解决?或者我必须为不同的DateFormat ("hmma")长度使用不同的String吗?

1 个答案:

答案 0 :(得分:1)

java.time

你显然有一个没有约会的时间。 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以下的分钟数字是一个没有填充前导零的数字,我没有解决方案。在我看来,这将是不可能的模棱两可。例如,123AM01:23AM还是12:03AM

提示:坚持ISO 8601格式,特别是24小时制和前导零。