【发布时间】:2014-08-16 03:51:06
【问题描述】:
我在当前时间之前的某个时间创建了一个新的日期对象。如果我让它在今天前 1 天显示,它工作正常。但如果我想显示 30 天前,它会转到未来 (?)
Date date = new Date();
long sometime = 24 * 60 * 60 * 1000; //a day
System.out.println(date.getTime() );
Date sometimeago = new Date(date.getTime() - sometime);
System.out.println(sometimeago );
sometime = 30* 24 * 60 * 60 * 1000; //a month
sometimeago = new Date(date.getTime() - sometime);
System.out.println(sometimeago );
输出:
1408160853776
Thu Aug 14 20:47:33 PDT 2014
Thu Sep 04 13:50:21 PDT 2014
这里有什么限制?达到长期限制?
【问题讨论】:
-
您应该查看
Calendar类,它会为您完成大部分计算。 -
或者更好的是新的java.time API(如果您使用的是Java 8)。或者,如果您不能,请使用 JodaTime。日子并不总是 24 小时。几个月并不总是 30 天。原来的日期/时间/日历类(以及相关的格式化程序/解析器)有很多问题。
-
只是补充说明:阅读闰秒,24 * 60 * 60 * 1000 并不总是 1 天,请使用日历
-
仅供参考,麻烦的旧日期时间类,如
java.util.Date、java.util.Calendar和java.text.SimpleDateFormat现在是 legacy,被 java.time 类取代。见Tutorial by Oracle。