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?

Ответ 1

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

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

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

При анализе даты используется только информация, которую вы предоставляете. В этом случае он знает только MM-dd-yyyy HH: mm.

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

Ответ 6

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

Итак, новая Date() - объект с разрешением в миллисекундах, что видно по:

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

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

Мне не хватает здесь вопроса?

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

Ответ 7

Date.getTime возвращает число миллисекунд с 1 января 1970 года, 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.

Ответ 8

Метод 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

Ответ 9

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