我有这个代码:
public static String formatMinSecOrHourMinSec(final String length) {
try {
final SimpleDateFormat hhmmss = new SimpleDateFormat("HH:mm:ss", Locale.GERMAN);
final Date date = hhmmss.parse(length);
final GregorianCalendar gc0 = new GregorianCalendar(Locale.GERMAN);
gc0.setTime(date);
if(gc0.getTimeInMillis() >= 3600 * 1000){
return hhmmss.format(gc0.getTime());
}else{
final SimpleDateFormat mmss = new SimpleDateFormat("mm:ss");
return mmss.format(gc0.getTime());
}
} catch (final ParseException e) {
LOGGER.debug("Konnte die Länge nicht parsen: " + length + "\n" + e);
return length;
}
}
如果length
设置为01:29:00,我估计它会返回01:29:00,但它会返回 29:00。这是因为 gc0.getTimeInMillis()
返回的时间比预期少一小时 (3600 * 1000)。我做错了什么?
最佳答案
这是因为 java.util.Date 使用您的默认时区。 (打印 date
的时间(以毫秒为单位),您将会看到)。
要修复它,请尝试:
final SimpleDateFormat hhmmss = new SimpleDateFormat("HH:mm:ss");
hhmmss.setTimeZone(TimeZone.getTimeZone("UTC"));
关于java - SimpleDateFormat 解析返回错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19515385/