как преобразовать дату в миллисекунды на Java?

long beginupd = new GregorianCalendar(2014,3,14,10,55,25).getTime().getTime();              
Date date = new Date();
long milli=date.getTime();           

System.out.println(beginupd);
System.out.println(milli);
System.out.println(date);

выход:

1397462125000

1394787327009

Пт 14 мар 10:55:27 EET 2014

В чем моя ошибка? почему не равны? разница всего две секунды, но разница на выходе очень большая

OK! 0 для января и 11 для декабря. спасибо Дэвид Уоллес


person user2772836    schedule 13.03.2014    source источник
comment
В каком формате ввод? Это String? Это Date значение?   -  person MadProgrammer    schedule 14.03.2014
comment
ДА! Если у вас есть значение String, вам нужно проанализировать его до Date, чтобы вы могли получить миллисекунды. Если у вас уже есть значение Date, вам не нужно выполнять синтаксический анализ... Я также предполагаю, что вы пытаетесь получить продолжительность между этими двумя значениями... Что можно увидеть здесь и здесь   -  person MadProgrammer    schedule 14.03.2014
comment
@user2772836 user2772836 Разберите его на Date, затем используйте Date.getTime(). Формат даты является произвольным, если вы можете создать соответствующий SimpleDateFormat для его представления.   -  person Jason C    schedule 14.03.2014
comment
Разберите его на дату, используя SimpleDateFormat, и вызовите метод getTime(). Это, вероятно, должно сделать это.   -  person Steinar    schedule 14.03.2014
comment
возможный дубликат преобразовать дату UTC в миллисекунды JAVA   -  person Jason C    schedule 14.03.2014
comment
MadProgrammer, если я скажу, что хочу посчитать 3+5, вы скажете, что это int или double? это не имеет значения.   -  person user2772836    schedule 14.03.2014
comment
@user2772836 user2772836 Пожалуйста, сохраняйте обсуждения в комментариях, непосредственно связанные с рассматриваемой проблемой.   -  person Jason C    schedule 14.03.2014
comment
Что, черт возьми, означает 2014-14-03? Неужели год стал длиннее?   -  person Dawood ibn Kareem    schedule 14.03.2014
comment
@DavidWallace гггг-дд-ММ, я полагаю. Немного странно.   -  person Jason C    schedule 14.03.2014


Ответы (3)


Причина, по которой это не работает, заключается в том, что устаревший конструктор Date, который вы используете, ожидает year - 1900 в качестве первого аргумента.

Вместо этого вы должны использовать SimpleDateFormat или GregorianCalendar для этого преобразования. Поскольку здесь уже есть отличный ответ, показывающий использование SimpleDateFormat, вот как вы используете GregorianCalendar для 1:39 утра 14 марта 2014 года.

new GregorianCalendar(2014, 2, 14, 1, 39, 0).getTime().getTime();

Имейте в виду, что месяц использует 0 для января и 11 для декабря.

person Dawood ibn Kareem    schedule 14.03.2014
comment
1397430420000 1394755672098 да, разница всего в 1 секунду, но эта разница очень большая - person user2772836; 14.03.2014
comment
Извините, я не понимаю, что вы говорите. Что это за два числа? - person Dawood ibn Kareem; 14.03.2014
comment
Эта разница выглядит примерно как 31 день для меня. Вы ввели 2 марта вместо 3, как я предложил? (Устаревший конструктор Date также нуждается в 2 для марта). - person Dawood ibn Kareem; 14.03.2014

Если это еще не Date, разберите его на Date. Формат даты является произвольным, если вы можете создать соответствующий SimpleDateFormat для его представления.

Получив Date, вы можете использовать Date.getTime() для получения значения в миллисекундах.

Для примера, который вы показали, если у вас есть строка:

String datestr = "2014-14-03 01:39:00";

Тогда соответствие SimpleDateFormat будет:

DateFormat format = new SimpleDateFormat("yyyy-dd-MM HH:mm:ss");

И преобразование будет:

long millis = format.parse(datestr).getTime();

Для этого не проблема использовать Date, так как конструкторы и getTime() по-прежнему являются одними из немногих оставшихся неустаревших компонентов.


Изменить: я вижу, что вы отредактировали свой вопрос, включив в него использование Date. Используемый вами конструктор устарел, а также не очень гибкий. input (вы должны иметь уже проанализированные компоненты даты, чтобы использовать его). SimpleDateFormat предоставляет нерекомендуемый способ преобразования произвольных строк в даты.

person Jason C    schedule 13.03.2014

Существует хорошая статья об API-интерфейсах Date, которую можно найти здесь. http://www.mkyong.com/java/java-time-elapsed-in-days-hours-minutes-seconds/

Чтобы преобразовать в миллисекунды, просто выполните некоторые основные математические операции.

person Clement Hoang    schedule 13.03.2014
comment
Математика для преобразования даты в миллисекунды далека от базовой (учитывайте время скачка и т. Д. - Также преобразования часового пояса, если не в UTC). Нет необходимости выполнять математические вычисления вручную, так как все доступные API-интерфейсы даты уже предоставляют возможность конвертировать время эпохи в миллисекунды. - person Jason C; 14.03.2014