Date.getTime()不包括时间?

时间:2020-03-05 18:56:34  来源:igfitidea点击:

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

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);
    }
}