我有时间标记的29-NOV-11 06.05.41.831000000 AM如何将模糊的时间戳转换以毫秒为Java日期
使用SimpleDateFormat的,我真的不能提取毫秒(0.831000000)...... 831毫秒(我不知道为什么那些000000.但那是来自不同的来源,没有控制)
我有时间标记的29-NOV-11 06.05.41.831000000 AM如何将模糊的时间戳转换以毫秒为Java日期
使用SimpleDateFormat的,我真的不能提取毫秒(0.831000000)...... 831毫秒(我不知道为什么那些000000.但那是来自不同的来源,没有控制)
一个可行的解决方案...对此,一个相当严格的正则表达式就像你看到的那样相当冗长。
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);
如果时间戳由字符串表示,您可以使用正则表达式来解析出额外的零。
额外的数字是纳秒。您不能将这些包含在SimpleDateFormat或标准库中。在你的情况下最简单的事情就是在解析日期/时间之前删除它们。
你必须小心不要移动太多数字。例如41.831是41秒和831毫秒,但41.83是42秒,83毫秒和41.8分析为41秒和8毫秒。 – 2012-03-12 09:19:04
我不知道,谢谢。看起来很疯狂,但没关系! – chooban 2012-03-12 09:32:20
Yeh ..its string ...问题是那些尾随零...如何使用正则表达式将它们转换为mill + micro或微秒?我需要这些毫秒(并且也是尾随AM/PM) – 2012-03-12 09:35:32