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

У меня есть дата внутри строки, что-то вроде «12 декабря 2012 года». Как я могу преобразовать это в миллисекунды (долгие)?


person Dawood Ahmed    schedule 18.09.2012    source источник


Ответы (8)


Использование SimpleDateFormat

String string_date = "12-December-2012";

SimpleDateFormat f = new SimpleDateFormat("dd-MMM-yyyy");
try {
    Date d = f.parse(string_date);
    long milliseconds = d.getTime();
} catch (ParseException e) {
    e.printStackTrace();
}
person Jon Lin    schedule 18.09.2012

Пора дать современный ответ на этот вопрос. В 2012 году, когда был задан вопрос, ответы, также опубликованные тогда, были хорошими ответами. Почему в ответах, опубликованных в 2016 году, также используются давно устаревшие классы SimpleDateFormat и Date, для меня немного больше загадка. java.time, современный API даты и времени Java, также известный как JSR-310, намного приятнее работать. Вы можете использовать его на Android через ThreeTenABP, см. этот вопрос: Как использовать ThreeTenABP в Android Project.

В большинстве случаев я рекомендую использовать миллисекунды с момента начала дня по всемирному координированному времени. Чтобы получить их:

    DateTimeFormatter dateFormatter
            = DateTimeFormatter.ofPattern("d-MMMM-uuuu", Locale.ENGLISH);
    String stringDate = "12-December-2012";
    long millisecondsSinceEpoch = LocalDate.parse(stringDate, dateFormatter)
            .atStartOfDay(ZoneOffset.UTC)
            .toInstant()
            .toEpochMilli();
    System.out.println(millisecondsSinceEpoch);

Это печатает:

1355270400000

Если вам требуется время в начале дня в каком-то конкретном часовом поясе, укажите этот часовой пояс вместо UTC, например:

            .atStartOfDay(ZoneId.of("Asia/Karachi"))

Как и ожидалось, это дает немного другой результат:

1355252400000

Еще одно замечание: не забудьте указать локаль для вашего DateTimeFormatter. Я решил, что декабрь будет английским, есть и другие языки, где этот месяц называется так же, поэтому, пожалуйста, выберите подходящий язык самостоятельно. Если вы не указали языковой стандарт, средство форматирования будет использовать настройку локали JVM, которая может работать во многих случаях, а затем неожиданно выйдет из строя однажды, когда вы запустите приложение на устройстве с другой настройкой языкового стандарта.

person Ole V.V.    schedule 22.11.2017

Взгляните на класс SimpleDateFormat, который может анализировать String и возвращать Date и метод getTime класса Date.

person Averroes    schedule 18.09.2012

  • Сначала преобразуйте строку в java.util.Date, используя дату форматировщик
  • Используйте getTime (), чтобы получить количество миллисекунд. с даты
person Dmitriy Tarasov    schedule 18.09.2012

вы можете использовать simpleDateFormat для анализа даты в строке.

person XepterX    schedule 18.09.2012

Самый простой способ - использовать Date Using Date () и getTime ()

    Date dte=new Date();
    long milliSeconds = dte.getTime();
    String strLong = Long.toString(milliSeconds);
    System.out.println(milliSeconds)
person Saranga kapilarathna    schedule 03.02.2016

используя simpledateformat, вы можете легко этого добиться.

1) Сначала преобразуйте строку в java.Date с помощью simpledateformatter.

2) Используйте метод getTime, чтобы получить количество миллисекунд с даты

 public class test {
      public static void main(String[] args) {
      String currentDate = "01-March-2016";
      SimpleDateFormat f = new SimpleDateFormat("dd-MMM-yyyy");
     Date parseDate = f.parse(currentDate);
     long milliseconds = parseDate.getTime();
  }
        }

подробнее Пример нажмите здесь

person Ankit jain    schedule 02.06.2016

Попробуйте под кодом

        SimpleDateFormat f = new SimpleDateFormat("your_string_format", Locale.getDefault());
        Date d = null;
        try {
            d = f.parse(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        long timeInMillis = d.getTime();
person subrahmanyam boyapati    schedule 19.10.2016