java 日历之间的差异

java difference between calendars

我只是在做两个不同日历的两个时间毫秒的简单差异。

示例:

    Calendar ini = Calendar.getInstance();
    try {
        Thread.sleep(1500);
    } catch (InterruptedException e) {e.printStackTrace();}

    Calendar end = Calendar.getInstance();
    long diff = end.getTimeInMillis()-ini.getTimeInMillis();
    System.out.println("diff "+diff);
    System.out.println("ini date "+ ini.getTime());
    System.out.println("end date "+ end.getTime());
    System.out.println("diff time format "+timeFormat.format(diff));

时间格式为:

private final static String TIME_STRING_FORMAT = "hh:mm:ss.SSS";
private static SimpleDateFormat timeFormat = new SimpleDateFormat(TIME_STRING_FORMAT);

而且在输出中,总是出现1个我们的差异,是不是SimpleDateFormat的问题???

输出:

diff 1500
ini date Sun May 24 22:27:01 CEST 2015
end date Sun May 24 22:27:03 CEST 2015
diff time format 01:00:01.500

感谢您的帮助!!

1 小时的差异是由您当地的时区造成的。 Date(long) 在格林威治标准时间 1970 年 1 月 1 日之后构造一个毫秒数的日期。在欧洲大陆(冬季)纪元后 1500 毫秒因此是 1 月 1 日 01:00:01.500.

如果您使用 Java 8,请参阅 Period and Duration 上的教程。 Duration 可能是您要使用的。

看起来 SimpleDateFormat 使用了时区。参见 this related question。因此,当您给它 1500 毫秒的时间时,它认为您给它的时间是格林威治标准时间纪元开始以来的时间。然后它将其转换为您的时区,为您提供几个小时的偏移量。您可能希望将 timeFormat 上的时区设置为 GMT。试试这个:

    Calendar ini = Calendar.getInstance();
    try {
        Thread.sleep(1500);
    } catch (InterruptedException e) {e.printStackTrace();}

    Calendar end = Calendar.getInstance();
    long diff = end.getTimeInMillis()-ini.getTimeInMillis();
    System.out.println("diff "+diff);
    System.out.println("ini date "+ ini.getTime());
    System.out.println("end date "+ end.getTime());
    Date date = new Date(diff);
    System.out.println(date);
    timeFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
    System.out.println("diff time format "+timeFormat.format(date));