2

我有这个代码:

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;
        }
    }

我估计它返回01:29:00如果length设置为01:29:00但它返回29:00。这是因为gc0.getTimeInMillis()返回的时间比预期的少一小时 (3600 * 1000)。我究竟做错了什么 ?

4

2 回答 2

1

这是因为 java.util.Date 使用的是您的默认时区。(以毫秒为单位的打印时间,date你会看到)。要修复它,请尝试:

final SimpleDateFormat hhmmss = new SimpleDateFormat("HH:mm:ss");
hhmmss.setTimeZone(TimeZone.getTimeZone("UTC"));
于 2013-10-22T11:21:43.327 回答
1
于 2018-12-05T21:17:06.273 回答