我有一个非常奇怪的问题。我写了以下代码:
public static final long ONE_DAY_IN_MS = 86400000L;
public static long getTimeOfTheDayInMs() {
return System.currentTimeMillis() % ONE_DAY_IN_MS;
}
这应该返回午夜以来的毫秒,对吗? 嗯,是的,不,因为它返回自午夜少于一小时以来的时间。 这是为什么?为什么这段代码:
System.out.println(new Date(System.currentTimeMillis()));
System.out.println(new Date(getTimeOfTheDayInMs()));
返回这个??
18-jul-2013 12.34.03
1-jan-1970 11.34.03
我还发现这个问题似乎是从1992年3月30日开始的。
还有其他人和我一样的问题吗?有人能解释我为什么吗?
提前致谢,
PS:我的Windows PC和Android平板电脑都出现了这个问题。
答案 0 :(得分:3)
您的getTimeOfTheDayInMs()
不会返回午夜以来的毫秒数。时代是1970年,currentTimeMillis()
是相对于此的。使用Calendar
http://developer.android.com/reference/java/util/Calendar.html获取第二个等字段。
答案 1 :(得分:1)
当我运行你的代码时,我得到了
Thu Jul 18 12:33:53 CEST 2013
Thu Jan 01 11:33:53 CET 1970
即。不同的是夏季时间的变化(CEST是欧洲中部的夏季时间; CET是中欧(冬季)时间,即GMT + 1)。
答案 2 :(得分:0)
由于时区变化,夏令时政策的变化等原因可能会发生这种情况。 我强烈建议您不要在生产代码中使用Date类。使用日历甚至更好的Joda Time。
DateMidnight midnight = new DateMidnight();
DateTime now = new DateTime();
Duration duration = new Duration(midnight, now);
int seconds = duration.toStandardSeconds().getSeconds();