public static void main(String[] args) throws ParseException {
// create a date
Date date = new Date();
long diff = date.getTime();
Date date1 = new Date(2013, 10, 1, 11, 6);
long diff1 = date1.getTime();
System.out.println("date is 1-10-2013, " + diff + " have passed.");
System.out.println("date is 1-10-2013, " + diff1 + " have passed.");
}
,输出
date is 1-10-2013, 1380605909318 have passed.
date is 1-10-2013, 61341428160000 have passed.
任何人都能详细说明1380605909318和61341428160000之间的差异吗?
答案 0 :(得分:12)
这一行:
Date date1 = new Date(2013, 10, 1, 11, 6);
......不做你做的事情。这会在当地时间晚上11:06创建一个Date
对象,代表 11月年中第一个 3913 。我不认为这是你想要的。
事实上,如果您更改代码以包含日期本身而不是硬编码您认为正确值的内容,那么您将会看到:
System.out.println("date is " + date + ", " + diff + " have passed.");
System.out.println("date is " + date1 + ", " + diff1 + " have passed.");
建造者被弃用的原因是 - 你应该注意弃用,以及the documentation。
现在你可以只使用java.util.Calendar
- 但我实际上建议您使用Joda Time代替,如果可能的话。它比java.util.Calendar
/ Date
更清晰,更清晰。或者,如果您可以使用具有新JSR-320日期/时间API的Java 8预发行版。
答案 1 :(得分:2)
答案 2 :(得分:2)
尝试
System.out.println("date is 1-10-2013, " + diff + " have passed.");
System.out.println("date is " + date1.toString() + diff1 + " have passed.");
你会看到错误。
根据不推荐使用的API的javadocs,年 - 年减去1900
http://docs.oracle.com/javase/6/docs/api/java/util/Date.html#Date(int,int,int,int,int)
答案 3 :(得分:2)
只需添加此行
即可System.out.println("date is 1-10-2013, " + new Date(diff1) + " have passed.");
您可以看到日期为Sat Nov 01 11:06:00 IST 3913
。
Date date1 = new Date(2013, 10, 1, 11, 6);
不是你想象的那样。这就是为什么你不应该使用弃用的方法(这里的构造函数)。
正如 @JonSkeet 所提到的,强烈推荐Joda而不是Java's Date。
答案 4 :(得分:0)
Date.getTime()以毫秒为单位返回日期和时间。
Javadoc说
Returns the number of milliseconds since January 1, 1970, 00:00:00 GMT
represented by this Date object.
@return the number of milliseconds since January 1, 1970, 00:00:00 GMT
represented by this date.
在第二个日期,你也错过了毫秒
答案 5 :(得分:0)
对于第二个日期对象,第一个参数采用(the year minus 1900)
。
因此,如果你想要2013年,你应该通过113
来自java docs Date class
public Date(int year,int month,int date,int hrs,int min)
参数:
年 - 减去1900年
月份 - 0-11之间的月份
date - 1-31之间的月份
小时 - 0-23之间的小时
min - 0-59之间的分钟。
答案 6 :(得分:0)
@Deprecated
public Date(int year,
int month,
int date,
int hrs,
int min)
Deprecated. As of JDK version 1.1, replaced by Calendar.set(year + 1900, month, date, hrs, min) or GregorianCalendar(year + 1900, month, date, hrs, min).
Allocates a Date object and initializes it so that it represents the instant at the start of the minute specified by the year, month, date, hrs, and min arguments, in the local time zone.
Parameters:
year - the year minus 1900.
month - the month between 0-11.
date - the day of the month between 1-31.
hrs - the hours between 0-23.
min - the minutes between 0-59.
因此,如果您想获得相同或非常接近的结果,您必须使用以下
日期date1 =新日期(113,9,1,11,6);