【发布时间】:2014-08-14 11:31:35
【问题描述】:
我写了一个小程序来打印两个Date对象之间的差异:
public static void main(final String[] args) throws Exception {
final DateFormat df = new SimpleDateFormat("HH:mm:ss.SSSSSS");
final Date start = Calendar.getInstance().getTime();
Thread.sleep(1000);
final Date end = Calendar.getInstance().getTime();
final long startMilliseconds = start.getTime();
final long endMilliseconds = end.getTime();
final long runtimeMilliseconds = endMilliseconds - startMilliseconds;
final Date runtime = new Date(runtimeMilliseconds);
System.out.print("Start : " + df.format(start));
System.out.println("\t Milliseconds: " + startMilliseconds);
System.out.print("End : " + df.format(end));
System.out.println("\t Milliseconds: " + endMilliseconds);
System.out.print("Runtime: " + df.format(runtime));
System.out.println("\t Milliseconds: " + runtimeMilliseconds);
System.out.println();
System.out.println("Milliseconds from new Date object: " + runtime.getTime());
}
它给出以下输出:
Start : 13:24:54.000871 Milliseconds: 1408015494871
End : 13:24:55.000871 Milliseconds: 1408015495871
Runtime: 01:00:01.000000 Milliseconds: 1000
Milliseconds from new Date object: 1000
毫秒之间的差异是正确的,但是新创建的Date 对象增加了一个小时。 runtime 对象的预期输出为:00:00:01.000000。我认为这是因为我的时区 (GMT+1)。如何计算两个 Date 对象之间的差异并获得一个新的 Date 对象,其中不包括额外的小时?我不想使用 Joda-Time 或其他库。
【问题讨论】:
-
为什么
Calendar.getInstance().getTime()而不仅仅是System.currentTimeMillis()? -
实际上并不清楚你在问什么:你已经编写了你想要的代码。
-
只是一个测试程序。在我的真实程序中,我也需要 Date 对象。预期输出为
00:00:01.000000,但实际输出为01:00:01.000000。 -
您正试图在
Date对象中存储一定量的时间(例如,1000 毫秒)。但是Date对象不适合存储数量的时间。Date对象是一个时间戳,它总是有一个日期和时间。如果您将“1000”存储在Date对象中,那么您将获得设置为 01-01-1970 00:00:01 GMT 的时间戳。