2012-03-12 95 views

回答

0

一个可行的解决方案...对此,一个相当严格的正则表达式就像你看到的那样相当冗长。

String input = "29-NOV-11 06.05.41.831000000 AM"; 

input = input 
     .replaceFirst(
       "(\\d+-\\w+-\\d+\\s\\d+\\.\\d+\\.\\d+\\.\\d{3})\\d{6}(\\s(\\w+))", 
       "$1$2"); 
try { 
    SimpleDateFormat sdf = new SimpleDateFormat(
      "dd-MMM-yy HH.mm.ss.SSS aa"); 

    Date date = sdf.parse(input); 
    System.out.println(sdf.format(date)); 

} catch (ParseException e) { 
    e.printStackTrace(); 
} 

你可以使用substr如果字符串总是固定的宽度,你认为正则表达式有点矫枉过正。

input = input.substring(0, 22) + input.substring(28, 31); 
0

如果时间戳由字符串表示,您可以使用正则表达式来解析出额外的零。

+0

你必须小心不要移动太多数字。例如41.831是41秒和831毫秒,但41.83是42秒,83毫秒和41.8分析为41秒和8毫秒。 – 2012-03-12 09:19:04

+0

我不知道,谢谢。看起来很疯狂,但没关系! – chooban 2012-03-12 09:32:20

+0

Yeh ..its string ...问题是那些尾随零...如何使用正则表达式将它们转换为mill + micro或微秒?我需要这些毫秒(并且也是尾随AM/PM) – 2012-03-12 09:35:32

2

额外的数字是纳秒。您不能将这些包含在SimpleDateFormat或标准库中。在你的情况下最简单的事情就是在解析日期/时间之前删除它们。