Как преобразовать дату в миллисекундах

Я хочу, чтобы преобразовать строку myDate = "и 2014/10/29 18:10:45"в к длинный МС (т. е. currentinmlilies)? Я искать его на Google, но я могу только найти как конвертировать МС по дата.

Примечание: чтобы было понятно, я хочу получить МС с даты в формате 1970/1/1.

Комментарии к вопросу (5)
Решение

Вы Don'т иметь дата, то есть строка представление даты. Вы должны преобразовать строку в дату и затем получить миллисекунды. Чтобы преобразовать строку в дату и наоборот, вы должны использовать класса simpledateformat класс.

Здесь'ы пример того, что вы хотите/нужно сделать (если часовой пояс не участвует здесь):

String myDate = "2014/10/29 18:10:45";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = sdf.parse(myDate);
long millis = date.getTime();

Все-таки, будьте осторожны, потому что в Java полученных миллисекунды миллисекунды между желаемым эпохи и 1970-01-01 00:00:00.


С помощью нового Дата/Время API доступно начиная с Java 8:

String myDate = "2014/10/29 18:10:45";
LocalDateTime localDateTime = LocalDateTime.parse(myDate,
    DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss") );
/*
  With this new Date/Time API, when using a date, you need to
  specify the Zone where the date/time will be used. For your case,
  seems that you want/need to use the default zone of your system.
  Check which zone you need to use for specific behaviour e.g.
  CET or America/Lima
*/
long millis = localDateTime
    .atZone(ZoneId.systemDefault())
    .toInstant().toEpochMilli();
Комментарии (3)

многабукаф.

LocalDateTime.parse(           // Parse into an object representing a date with a time-of-day but without time zone and without offset-from-UTC.
    "2014/10/29 18:10:45"      // Convert input string to comply with standard ISO 8601 format.
    .replace( " " , "T" )      // Replace SPACE in the middle with a `T`.
    .replace( "/" , "-" )      // Replace SLASH in the middle with a `-`.
)
.atZone(                       // Apply a time zone to provide the context needed to determine an actual moment.
    ZoneId.of( "Europe/Oslo" ) // Specify the time zone you are certain was intended for that input.
)                              // Returns a `ZonedDateTime` object.
.toInstant()                   // Adjust into UTC.
.toEpochMilli()                // Get the number of milliseconds since first moment of 1970 in UTC, 1970-01-01T00:00Z.

1414602645000 Зона # Время Принятый ответ Правильный, за исключением того, что он игнорирует важнейший вопрос о часовых поясах. Ваша входная строка 6:10 pm В Париже или МонтрéАль? Или мирового? Использовать правильный часовой пояс имя. Обычно континент плюс города/области. Например, в "Европа/Осло" в. Избежать 3 или 4 буквенные коды, которые не являются ни стандартизирован, ни уникальным.

и Java.время

Современный подход использует Ява.время классы. Изменять ваш вклад в соответствие с ИСО 8601 стандарт. Заменить пространство в середине С Т. И заменить символами с дефисом. В Ява.время классы использовать эти стандартные форматы по умолчанию для разбора/генерации строк. Так что не нужно указать шаблон форматирования.

String input = "2014/10/29 18:10:45".replace( " " , "T" ).replace( "/" , "-" ) ;
LocalDateTime ldt = LocalDateTime.parse( input ) ;

А LocalDateTime, как ваш входной строки, отсутствует какое-либо понятие часовой пояс или смещение от времени UTC. Без контекста зоне/смещение, LocalDateTime не имеет реального смысла. Это 6:10 pm В Индии, Европе или Канаде? В каждом из тех мест, опыт 6:10 pm в разные моменты, в разных точках на временной шкале. Так, необходимо указать, что вы имеете в виду, если вы хотите определить конкретную точку на временной шкале.

ZoneId z = ZoneId.of( "Europe/Oslo" ) ;
ZonedDateTime zdt = ldt.atZone( z ) ;  

Теперь у нас есть определенный момент в том, что ZonedDateTime. Конвертировать в UTC, получающего мгновение. О МиГ класс представляет момент на временной шкале в мирового с разрешением НС (до девяти (9) цифр десятичной дробью).

Instant instant = zdt.toInstant() ;

Теперь мы можем получить желаемое число миллисекунд с момента обращения эпоху первой минуты 1970 года в формате UTC 1970-01-01T00:00Z.

long millisSinceEpoch = instant.toEpochMilli() ; 

Мы предупреждаем о возможной потере данных. В миг объект способен перевозить микросекунд или наносекунд, лучше, чем МС. Что тоньше дробная часть секунды будет игнорироваться при получении количество миллисекунд.

Об Ява.время

В [Ява.время] основы(http://docs.oracle.com/javase/10/docs/api/java/time/package-summary.html) построен в Java 8 и выше. Эти классы вытеснить хлопотно старый наследие Дата Время классы, такие как Ява.утиль.Даты, календарь, & класса simpledateformat. В Joda времени проекта, теперь в режиме техническое обслуживание, советует миграции Ява.время классы. Чтобы узнать больше, см. учебник по Oracle. Поиск переполнения стека для многих примеров и объяснений. Спецификация в JSR 310. Вы можете обменять Ява.время объекты непосредственно с вашей базой данных. Использовать [драйвера] совместимый(https://en.wikipedia.org/wiki/jdbc_driver) с с JDBC 4.2 или позже. Нет необходимости для строк, нет необходимости в Ява.для SQL.* классов. Где получить Ява.классы время?

  • Java на SE 8, Java на SE 9, Java на SE 10, а позже
  • Встроенная.
  • Часть стандартных Java API с пакетной реализации.
  • Ява 9 добавляет некоторые незначительные функции и исправления.
  • Версии SE 6 и Java на SE 7
  • Большая часть Java.функциональность время портированы с Java 6 & 7 в ThreeTen-бэкпортировать.
  • Планшет
  • В более поздних версиях набор реализаций для Android на Java.классы время.
  • Для более ранних версий Андроид (<26), В [ThreeTenABP] проект(https://github.com/JakeWharton/ThreeTenABP) адаптация ThreeTen-бэкпортировать (упоминалось выше). Смотрите как использовать ThreeTenABP.... В ThreeTen-Экстра проект расширяется Java.время дополнительных занятий. Этот проект является полигоном для возможных будущих дополнений к Java.время. Вы можете найти некоторые полезные классы, такие как интервал, YearWeek, YearQuarter, и подробнее.

    Joda Времени

    Обновление: в Joda времени проект сейчас находится в режиме техническое обслуживание, с командой, консультирование миграции в Ява.время классы. Я оставлю этот раздел нетронутыми для истории. Ниже находится такой же код, но с использованием Joda времени Библиотека 2.5 и обработки часовом поясе. На Java.утиль.Дата, .Календарь, а также .Класса simpledateformat классы, как известно, хлопотное, запутанное, и недостатки. Избегать их. Использовать Joda времени или Java.пакет времени (вдохновленный Joda времени), встроенные в Java 8.

    ИСО 8601

    Ваши строки почти в формате ISO 8601. Слеши должны быть дефисы и пространство в середине должна быть заменена на "Т". Если мы вносим, то результирующая строка может быть подана непосредственно в конструктор не удосужившись указать праматерии. Joda времени использует ISO 8701 форматов, как это'по умолчанию для разбора и генерации строк. Пример Кода #

String inputRaw = "2014/10/29 18:10:45";
String input = inputRaw.replace( "/", "-" ).replace( " ", "T" );
DateTimeZone zone = DateTimeZone.forID( "Europe/Oslo" ); // Or DateTimeZone.UTC
DateTime dateTime = new DateTime( input, zone );
long millisecondsSinceUnixEpoch = dateTime.getMillis();
Комментарии (2)

В класса simpledateformat класс позволяет обработать строку в Ява.утиль.Датыобъекта. Если у вас есть объект Date, вы можете получить миллисекунд с начала эпохи, называя дату.gettime () так.

Полный пример:

String myDate = "2014/10/29 18:10:45";
//creates a formatter that parses the date in the given format
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = sdf.parse(myDate);
long timeInMillis = date.getTime();

Обратите внимание, что это дает вам "длинные" и не двойные, но я думаю, что's наверное вы этого хотели. В документации для класса simpledateformat класс имеет тонны информации о том, как настроить его для разбора различных форматов.

Комментарии (0)

В 2017 ответ: использовать дату и время занятий, представленный в Java 8 (а также бэкпортированы в Java 6 и 7 в портировать ThreeTen).

Если вы хотите интерпретировать даты и времени строки в зоне компьютера:

    long millisSinceEpoch = LocalDateTime.parse(myDate, DateTimeFormatter.ofPattern("uuuu/MM/dd HH:mm:ss"))
            .atZone(ZoneId.systemDefault())
            .toInstant()
            .toEpochMilli();

Если другой часовой пояс, заполнить эту зону в Вместо ZoneId.systemDefault(). Если мирового, использовать

    long millisSinceEpoch = LocalDateTime.parse(myDate, DateTimeFormatter.ofPattern("uuuu/MM/dd HH:mm:ss"))
            .atOffset(ZoneOffset.UTC)
            .toInstant()
            .toEpochMilli();
Комментарии (2)