Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么这段代码给了我一个未来3.9万年的日期?_Java_Datetime - Fatal编程技术网

Java 为什么这段代码给了我一个未来3.9万年的日期?

Java 为什么这段代码给了我一个未来3.9万年的日期?,java,datetime,Java,Datetime,我写了一个方法,返回字符串格式日期的毫秒值,出于某种原因,它给出了未来39000年的日期。你知道为什么吗 private long getTimeInMs(String currentStartTimeString) { //String newDateString = currentStartTimeString.substring(6,10)+"-"+currentStartTimeString.substring(3, 5)+"-"+currentStartTimeStri

我写了一个方法,返回字符串格式日期的毫秒值,出于某种原因,它给出了未来39000年的日期。你知道为什么吗

private long getTimeInMs(String currentStartTimeString) {
        //String newDateString = currentStartTimeString.substring(6,10)+"-"+currentStartTimeString.substring(3, 5)+"-"+currentStartTimeString.substring(0, 2)+ "T" + currentStartTimeString.substring(11);
        String newDateString = currentStartTimeString.substring(0,19);
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        long timeInMs;
        try {
            timeInMs = df.parse(newDateString).getTime();
        } catch (ParseException e) {
            log.error("Failed to parse current Start Time",e);
            return 0;
        }
        return timeInMs;
    }
如果我输入日期字符串“2009-07-07 10:51:01.15”,它将返回1246960261000,实际上是Wed Aug 06 41484 11:16:40 GMT+0100(GMT夏令时)


好的,我认为问题是它让ms通过了Java epoc,我正在对照unix时代对其进行评估

我觉得不错。解析toString到“2009年7月7日星期二10:51:01英国夏令时”(我在这里的英国时区)的日期对象,但这应该没有太大区别。1246960261000的毫安值是正确的,为什么你认为它的计算结果是遥远的未来?你是怎么计算的?

我觉得没问题。解析toString到“2009年7月7日星期二10:51:01英国夏令时”(我在这里的英国时区)的日期对象,但这应该没有太大区别。1246960261000的毫安值是正确的,为什么你认为它的计算结果是遥远的未来?您是如何计算的?

我猜您将getTime()返回的值解释为一个Unix时间值。它不是-它是Java纪元后的毫秒,而不是Unix纪元后的秒。

我猜您将getTime()返回的值解释为Unix时间值。不是,是Java纪元过去的毫秒,而不是Unix纪元过去的秒。

在Java 6中运行代码,我得到1246978261000,结果证明是正确的

System.out.println(new Date(timeInMs));
返回

2009年7月7日星期二10:51:01美国东部时间

编辑:

要确认其他人的建议,即您正在查看秒(不是毫秒),请执行以下操作:

屈服

星期一美国东部时间3月2日13:16:40 41485


在Java6中运行您的代码,我得到了1246978261000,这证明是正确的

System.out.println(new Date(timeInMs));
返回

2009年7月7日星期二10:51:01美国东部时间

编辑:

要确认其他人的建议,即您正在查看秒(不是毫秒),请执行以下操作:

屈服

星期一美国东部时间3月2日13:16:40 41485


该值是正确的,事实上:

 (((((1246989061000 / 1000) / 60)/60)/24)/365)
给予


39.54176373033992年,考虑到0是1970年,这是正确的。

该值是正确的,事实上:

 (((((1246989061000 / 1000) / 60)/60)/24)/365)
给予


39.54176373033992年,考虑到0是1970年,这是正确的。

我建议使用jodatime。手工解析java日期简直是地狱。在这种情况下,Joda不会让事情变得更简单。您仍然需要指定格式模式。当您确定未来是39k年而不是毫秒时,您是否将1246960261000解释为秒?javascript使用unix epoch还是Java epoch?我会假设是unix?这可能就是我的问题所在。顺便说一句,我删除了我的错误答案。我建议使用jodatime。手工解析java日期简直是地狱。在这种情况下,Joda不会让事情变得更简单。您仍然需要指定格式模式。当您确定未来是39k年而不是毫秒时,您是否将1246960261000解释为秒?javascript使用unix epoch还是Java epoch?我会假设是unix?这可能就是我的问题所在。顺便说一句,我删除了我的错误答案。虽然我认为这两个时代是相同的。我所需要做的就是除以1000。虽然我认为这两个时代是一样的。我需要做的就是除以1000。