从时间戳中剥离时间

fat*_*tra 1 java timestamp

为什么我不能以这种方式清除时间戳中的时间:

one day == 24 * 3600 * 1000 == 86400000 milliseconds.

long ms = new Date().getTime();  //Mon Sep 03 10:06:59 CEST 2012
Date date = new Date(ms - (ms % 86400000));
Run Code Online (Sandbox Code Playgroud)

为什么是这个Mon Sep 03 02:00:00 CEST 2012而不是Mon Sep 03 00:00:00 CEST 2012

Jon*_*eet 5

为什么我不能以这种方式从时间戳中清除时间

您正确清除了UTC 中的时间部分。中的毫秒值Date始终相对于UTC 1970 年 1 月 1 日午夜。但是,由于工作方式的原因,您不会以 UTC 格式显示Date.toString()它(它始终使用系统本地时区)。请注意, aDate本身没有时区的概念。自 1970 年 1 月 1 日午夜(UTC)以来,仅相差几毫秒。

如果不指定您正在谈论的时区,“从时间戳中清除时间”的概念实际上没有意义,因为相同的时间戳在不同的时区将具有不同的一天中的时间(甚至日期)。

老实说,我建议使用Joda Time进行任何重要的日期/时间工作。然后您可以创建一个LocalDate显然表示“只是一个日期”的 - 并且从 a Date(或Instant)到 a 的翻译LocalDate将使您可以轻松指定您想要使用的时区。