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。
另一方面,当我们为对象分配毫秒值(在这种情况下,使用new Date())时,Date对象的确保留毫秒。因此,当我们打印出来时,它也包含毫米。
回答
解析日期时,它仅使用我们提供的信息。
在这种情况下,它仅知道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以来的毫秒数。因此," 06-04-2007 07:05"" 01-01-1970 00:00"等于1180955340000毫秒。由于问题唯一关心的是日期的时间部分,因此此计算的粗略方法是07:05到00:00之间的毫秒数,即25500000。这两个时间均可以被1000整除有毫秒。
在第二个日期中,它将使用执行该行代码的当前时间。这将使用计算中当前秒之后的当前毫秒数。因此,Date.getTime将很有可能返回一个不能被1000整除的数字。
回答
Date的getTime()方法返回自1970年1月1日以来的毫秒数(此日期称为"纪元",因为所有计算机日期都基于该日期)。不应使用它来显示日期的可读版本。
请改用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
回答
建议不要使用Sun JDK Time / Date库(这有很多不足之处),而推荐使用http://joda-time.sourceforge.net。
这是一个非常成熟且活跃的sourceforge项目,并且具有非常优雅的API。
回答
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); } }