Как преобразовать строку даты в Long millseconds

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

9 ответов


С помощью 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();
}

SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
Date date = (Date)formatter.parse("12-December-2012");
long mills = date.getTime();

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


  • сначала преобразовать строку java.util.Date на дату форматер
  • использовать gettime () так чтобы получить количество миллисекунд от даты

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

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

    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, который может работать во многих случаях, а затем неожиданно завершится неудачей в один прекрасный день при запуске приложения на устройстве с другим параметром языкового стандарта.


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


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

1) Сначала преобразуйте строку в java.Дата с помощью 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();
  }
        }

пример нажмите кнопку здесь


самый простой способ используется дата с помощью Date () и getTime ()

    Date dte=new Date();
    long milliSeconds = dte.getTime();
    String strLong = Long.toString(milliSeconds);
    System.out.println(milliSeconds)

попробовать ниже код

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