java - SimpleDateFormat 解析返回错误值

标签 java parsing java-7 simpledateformat

我有这个代码:

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/

相关文章:

parsing - rebol解析问题

ssl - javax.net.ssl.SSLHandshakeException : handshake_failure when using JMeter with SSL (JDK8)

java - 将 eclipse 的 java 编译器更改为 jdk7

java - 设置 sun.rmi.transport.tcp.maxConnectionThreads

java - 如何将 onClickLisntener 函数分配给我的适配器的元素?

作为强类型类的 Java .properties 文件

java - Proguard - 找不到 apache cxf/java.lang.IllegalArgumentException 的常见父类(super class)异常

algorithm - 是否有一种算法可以确定给定的句子是否是语法的子句?

java - 如何使用 Apache POI 和 Java 添加多个不同的 Excel 列

java - Java7 的日期差异(以天为单位)