当小时为12时,SimpleDateFormat转换日期的返回值不正确

时间:2018-07-23 12:36:16

标签: java timestamp simpledateformat

我在将json文件中的日期转换为时间戳时遇到问题。当小时= 12时,返回的时间戳不正确。

Java版本1.8.0_171

使用下面的代码段,我希望输出为

2017-07-19 07:43:42.0

2017-07-18 08:43:42.0

2017-07-19 09:43:42.0

相反,我得到

2017-07-19 07:43:42.0

2017-07-18 20:43:42.0

2017-07-19 09:43:42.0

我在2台机器上尝试过,并让一位同事运行它,结果相同 任何人都可以看到问题所在吗?我可能正在盯着它

import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Locale;
import org.apache.commons.lang3.StringUtils;

public class TimestampTest {

    public static void main(String[] args) {

        String input = "2017-07-19T11:43:42.000+0000";
        System.out.println(stringToTimestamp(input));

        input = "2017-07-19T12:43:42.000+0000";
        System.out.println(stringToTimestamp(input));

        input = "2017-07-19T13:43:42.000+0000";
        System.out.println(stringToTimestamp(input));

    }

    private static Timestamp stringToTimestamp(String input) {
        try {   
            if(StringUtils.isBlank(input)) {
                return null;
            }
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSSZ",
                Locale.getDefault());
            java.util.Date parsedDate = dateFormat.parse(input);
            Timestamp timestamp = new java.sql.Timestamp(parsedDate.getTime());
            return timestamp;

        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }
}

2 个答案:

答案 0 :(得分:2)

除了您不再使用DateSimpleDateFormat以外,您的错误还在于您使用的是hh而不是HH

  

h->小时,以上午/下午(1-12)

     

H->一天中的小时(0-23)

在您的情况下,请考虑使用LocalDateTime

答案 1 :(得分:0)

发生这种情况是因为您使用的是SimpleDateFormat,默认情况下宽松。如果您通过设置setLenient(false)关闭宽大处理:

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSSZ", Locale.getDefault());
dateFormat.setLenient(false);

您将看到一个异常消息:

java.text.ParseException: Unparseable date: "2017-07-19T13:43:42.000+0000"

此处的根本原因是您要提交13数小时的时间,这需要使用HH模式而不是hh。由于宽大处理,您的代码会默默地固定日期,而不是引发异常。

  

每小时的小时(0-23)

     

h上午/下午的小时数(1-12)

相关问题