我试图做一个简单的减法日期和得到奇怪的结果。由于某种原因,当我用SimpleDateFormat格式化它时,会有7个小时的差异。
package timedemo;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Timedemo {
public static void main(String[] args) {
Date start = new Date(); // time right now
Date stop = new Date();
long startTime = start.getTime()-1000; // introduce a second of skew
long stopTime = stop.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");
// First one shows up prior to 1970 epoch. Okay, except for 5 hour variance.
// Probably a timezone thing, as I'm in EST (-5).
System.out.println("New date is "+new Date(stopTime - startTime));
System.out.println("Raw Start is "+startTime); // fine
System.out.println("Raw Stop is "+stopTime); // fine
System.out.println("Raw Difference is "+(stopTime-startTime));
System.out.println("Formatted Start is "+sdf.format(startTime));
System.out.println("Formatted Stop is "+sdf.format(stopTime));
System.out.println("Formatted Difference is "+sdf.format(stopTime-startTime));
}
}其结果是:
New date is Wed Dec 31 19:00:01 EST 1969
Raw Start is 1418397344360
Raw Stop is 1418397345360
Raw Difference is 1000
Formatted Start is 10:15:44
Formatted Stop is 10:15:45
Formatted Difference is 07:00:01为什么在最后一条线上换班七小时?
发布于 2014-12-12 15:28:37
"12-7 = 5“绝对与问题有关.或者更准确地说,是"12-5=7",即午夜前5小时是晚上7点如果将其格式化为完整日期/时间,您将看到:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");见鬼,你可以在你的第一行中看到这一点:"Wed Dec 31 19:00:01 EST 1969“-- 19:00是晚上7点,你用hh作为07格式化。
从根本上讲,问题在于你试图把时间上的差异当作一个时间点来对待。我强烈敦促你不要这样做。如果您绝对希望这样做(而且区别总是非负的,但少于24小时),那么您应该将SimpleDateFormat上的时区设置为UTC,使用HH而不是hh。但是最好使用Java8中的Joda时间或java.time来表示Duration,即两个时间点之间的差异。Date根本不是一个合适的数据类型。
https://stackoverflow.com/questions/27446761
复制相似问题