Date.getTime()不包括时间?

无法理解为什么会发生以下情况:

String date = "06-04-2007 07:05"; SimpleDateFormat fmt = new SimpleDateFormat("MM-dd-yyyy HH:mm"); Date myDate = fmt.parse(date); System.out.println(myDate); //Mon Jun 04 07:05:00 EDT 2007 long timestamp = myDate.getTime(); System.out.println(timestamp); //1180955100000 -- where are the milliseconds? // on the other hand... myDate = new Date(); System.out.println(myDate); //Tue Sep 16 13:02:44 EDT 2008 timestamp = myDate.getTime(); System.out.println(timestamp); //1221584564703 -- why, oh, why? 

几毫秒? 您在第一个示例中仅提供了分钟信息,而您的第二个示例以毫秒为单位从系统中获取当前日期,您正在寻找什么?

 String date = "06-04-2007 07:05:00.999"; SimpleDateFormat fmt = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss.S"); Date myDate = fmt.parse(date); System.out.println(myDate); long timestamp = myDate.getTime(); System.out.println(timestamp); 

同意上述内容,不应该有任何毫秒。 。 。

因为您指定的简单日期格式会丢弃毫秒。 因此生成的Date对象没有该信息。 所以当你把它打印出来时,全是0。

另一方面,Date对象在为其分配一个毫秒的值时保留毫秒(在这种情况下,使用新的Date())。 因此,当您打印出来时,它也包含毫秒数。

我没有使用Sun JDK时间/日期库(这有很多不足之处),我建议您查看http://joda-time.sourceforge.net 。

这是一个非常成熟和活跃的sourceforge项目,并且具有非常优雅的API。

解析日期时,它仅使用您提供的信息。 在这种情况下,它只知道MM-dd-yyyy HH:mm。

创建新的日期对象将返回当前系统日期/时间(自纪元以来的毫秒数)。

Date对象的toString()没有显示毫秒……但它们在那里

所以新的Date()是具有毫秒分辨率的对象,可以通过以下方式看出:

  System.out.printf( "ms = %d\n", myDate.getTime() % 1000 ) ; 

但是,使用SimpleDateFormat构造日期时,不会向其传递毫秒数

我在这里错过了这个问题吗?

[编辑]哈哈哈……太慢了;)

Date.getTime返回自Date对象表示的1970年1月1日00:00:00 GMT以来的毫秒数。 所以“06-04-2007 07:05” – “01-01-1970 00:00”等于1180955340000毫秒。 由于您的问题唯一关注的是日期的时间部分,因此粗略思考此计算的方法是07:05和00:00之间的毫秒数,即25500000.由于两次都没有,因此可以被1000整除有任何毫秒。

在第二个日期,它使用执行该行代码时的当前时间。 这将使用超过当前秒的当前毫秒数在计算中。 因此,Date.getTime很可能会返回一个不能被1000整除的数字。

DategetTime()方法返回自1970年1月1日以来的毫秒数(此日期称为“epoch”,因为所有计算机日期都基于此日期)。 它应该用于显示您的日期的人类可读版本。

请改用SimpleDateFormat.format()方法。 以下是我认为可以解决您的问题的部分代码的修订版:

 String date = "06-04-2007 07:05:23:123"; SimpleDateFormat fmt = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss:S"); Date myDate = fmt.parse(date); System.out.println(myDate); //Mon Jun 04 07:05:23 EDT 2007 String formattedDate = fmt.format(myDate); System.out.println(formattedDate); //06-04-2007 07:05:23:123 
 import java.util.*; public class Time { public static void main(String[] args) { Long l = 0L; Calendar c = Calendar.getInstance(); //milli sec part of current time l = c.getTimeInMillis() % 1000; //current time without millisec StringBuffer sb = new StringBuffer(c.getTime().toString()); //millisec in string String s = ":" + l.toString(); //insert at right place sb.insert(19, s); //ENJOY System.out.println(sb); } }