我有一个需要将日期从一种输入字符串格式转换为另一种的 java 方法。输入和输出格式必须保留所有毫秒细节,因为这是用于时间戳通常仅相隔毫秒的流程跟踪解决方案。
SimpleDateFormat 似乎正在丢失所有毫秒数据,并且只返回秒和毫秒的随机数。
输入日期字符串:“05/23/2013 12:32:13.45133” 输入日期格式:“MM/dd/yyyy HH:mm:ss.SSSSS” 输出日期格式:“yyyyMMddHHmmssSSS”
鉴于上述输入日期和格式,我生成的日期字符串为:20130523123258133。这显然与输入秒数完全不同。
输入格式可能不同,但输出格式必须始终相同。
下面是目前的方法:
private long dateSequencer(String inputDt, String inputFormat) {
long result = 0;
try {
// Convert input date into yyyyMMddHHmmssSSS format for sequencing
SimpleDateFormat dtFrmt = new SimpleDateFormat(inputFormat);
Date dt = new Date();
dt = dtFrmt.parse(inputDt);
// input String converted to Date, now reformat to Long
dtFrmt = new SimpleDateFormat("yyyyMMddHHmmssSSS");
String reFrmt = dtFrmt.format(dt);
result = Long.parseLong(reFrmt);
} catch (Exception ex) {
System.out.println("++++ Exception converting dateSequencer: " + ex.toString());
}
System.out.print("+++ABM dateSeq: [inputDt=" + inputDt + "] [inputFormat=" + inputFormat + "] [result=" + result +"]");
return result;
}
运行时的日志文件条目:
+++ABM dateSeq: [inputDt=05/23/2013 12:32:13.45133] [inputFormat=MM/dd/yyyy HH:mm:ss.SSSSS] [结果=20130523123258133]
由于输入格式可能会改变,我无法手动解析输入字符串以依赖特定模式。这就是为什么我允许传递模式,并使用 SimpleDateFormat 转换为 Date,然后再转换回 String。
我怎样才能可靠地做到这一点?有没有更有效的方法将给定的输入日期字符串转换为标准格式?
谢谢!