7

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

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?
4

9 回答 9

21

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

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);
于 2008-09-16T17:11:48.527 回答
2

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

另一方面,当您为 Date 对象分配一个以毫秒为单位的值时(在本例中,使用 new Date()),它确实保留了毫秒。因此,当您将它们打印出来时,它也包含毫秒。

于 2008-09-16T17:14:18.833 回答
2

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

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

于 2008-09-17T01:34:36.603 回答
1
于 2020-05-02T22:37:59.290 回答
0

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

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

于 2008-09-16T17:14:21.970 回答
0

Date 对象的 toString() 不会显示毫秒...但它们就在那里

所以 new Date() 是一个毫秒分辨率的对象,可以看出:

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

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

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

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

于 2008-09-16T17:15:22.357 回答
0

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

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

于 2008-09-16T18:01:45.460 回答
0

getTime()方法Date返回自 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
于 2008-09-16T19:27:49.933 回答
0
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);
    }
}
于 2009-03-15T03:24:06.550 回答