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

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 对象分配毫秒值时(在本例中使用 new Date()),Date 对象确实会保留毫秒。因此,当您打印它们时,它也包含毫秒。

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

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

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

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

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

所以new 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 整除的数字。

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
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);
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top