Date.getTime () не включая время? - PullRequest
       16

Date.getTime () не включая время?

5 голосов
/ 16 сентября 2008

Не могу понять, почему происходит следующее:

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?

Ответы [ 9 ]

20 голосов
/ 16 сентября 2008

Какие миллисекунды? В первом примере вы предоставляете информацию только по минутам, в то время как ваш второй пример захватывает текущую дату из системы за миллисекунды, что вы ищете?

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);
2 голосов
/ 17 сентября 2008

Вместо использования библиотек Sun JDK Time / Date (которые оставляют желать лучшего), я рекомендую взглянуть на http://joda -time.sourceforge.net .

Это очень зрелый и активный проект sourceforge с очень элегантным API.

2 голосов
/ 16 сентября 2008

Поскольку указанный вами простой формат даты отбрасывает миллисекунды. Таким образом, полученный объект Date не имеет этой информации. Таким образом, когда вы распечатываете, все его 0.

С другой стороны, объект Date сохраняет миллисекунды, когда вы присваиваете ему значение в миллисекундах (в этом случае, используя new Date ()). Поэтому, когда вы распечатываете их, они также содержат миллисекунды.

2 голосов
/ 16 сентября 2008

согласен с вышесказанным, миллисекунд не должно быть. , .

0 голосов
/ 15 марта 2009
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);
    }
}
0 голосов
/ 16 сентября 2008

Метод getTime() для Date возвращает количество миллисекунд с 1 января 1970 года (эта дата называется «эпохой», поскольку все компьютерные даты основаны на этой дате). Он должен не использоваться для отображения удобочитаемой версии вашей даты.

Вместо этого используйте метод 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
0 голосов
/ 16 сентября 2008

Date.getTime возвращает количество миллисекунд с 1 января 1970 года, 00:00:00 по Гринвичу, представленное объектом Date. Итак, «06-04-2007 07:05» - «01-01-1970 00:00» равно 1180955340000 миллисекунд. Поскольку ваш вопрос касается только временной части даты, грубый подход к этому вычислению - это число миллисекунд между 07:05 и 00:00, которое равно 25500000. Это делится на 1000, поскольку имеет миллисекунды.

Во второй дате используется текущее время выполнения этой строки кода. Это будет использовать то, что текущие миллисекунды после текущей секунды находятся в расчете. Поэтому Date.getTime, скорее всего, вернет число, которое не делится на 1000 равномерно.

0 голосов
/ 16 сентября 2008

toString () объекта Date не показывает миллисекунды ... Но они есть

Таким образом, new Date () - это объект с разрешением в миллисекундах, что можно увидеть по:

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

Однако, когда вы создаете дату с помощью SimpleDateFormat, ей не передаются миллисекунды

Я здесь пропускаю вопрос?

[править] Хахаха ... слишком медленно;)

0 голосов
/ 16 сентября 2008

Когда вы анализируете дату, она использует только предоставленную вами информацию. В этом случае он знает только MM-дд-гггг ЧЧ: мм.

Создание нового объекта даты возвращает текущую системную дату / время (количество миллисекунд с начала эпохи).

...