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

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

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);
20
ответ дан 16 сент. '08 в 20:11
источник

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

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

2
ответ дан 17 сент. '08 в 4:34
источник

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

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

2
ответ дан 16 сент. '08 в 20:14
источник

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

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

0
ответ дан 16 сент. '08 в 20:14
источник

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

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

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

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

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

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

0
ответ дан 16 сент. '08 в 20:15
источник

Метод 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 сент. '08 в 22:27
источник

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.

0
ответ дан 16 сент. '08 в 21:01
источник
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
ответ дан 15 марта '09 в 6:24
источник