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

87

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

Давуд Ахмед
источник

Ответы:

154

Использование 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();
}
Джон Лин
источник
16
SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
Date date = (Date)formatter.parse("12-December-2012");
long mills = date.getTime();
Рам Киран
источник
11

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

Оле В.В.
источник
9

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

Аверроэс
источник
7
  • Сначала преобразовать строку в форматировщикjava.util.Date даты
  • Используйте getTime (), чтобы получить количество миллисекунд с даты
Дмитрий Тарасов
источник
3

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

XepterX
источник
1

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

    Date dte=new Date();
    long milliSeconds = dte.getTime();
    String strLong = Long.toString(milliSeconds);
    System.out.println(milliSeconds)
Саранга капиларатна
источник
1

используя 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();
  }
        }

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

Анкит джайн
источник
0

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

        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();
субрахманйам бояпати
источник