Jak przekonwertować ciąg Date na długie milisekundy

Odpowiedzi:

154

Korzystanie z 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();
}
Jon Lin
źródło
16
SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
Date date = (Date)formatter.parse("12-December-2012");
long mills = date.getTime();
Ram kiran
źródło
11

Najwyższy czas, aby ktoś udzielił nowoczesnej odpowiedzi na to pytanie. W 2012 roku, kiedy zadawano to pytanie, odpowiedzi zamieszczone wówczas również były dobre. Dlaczego w odpowiedziach opublikowanych w 2016 r. Wykorzystano również dawno przestarzałe zajęcia SimpleDateFormati Datejest to dla mnie nieco bardziej tajemnicze. java.time, nowoczesny interfejs API daty i czasu Javy, znany również jako JSR-310, jest o wiele przyjemniejszy w obsłudze. Możesz go używać na Androidzie za pośrednictwem ThreeTenABP, zobacz to pytanie: Jak używać ThreeTenABP w Android Project .

Do większości celów zalecam używanie milisekund od początku dnia w czasie UTC . Aby je uzyskać:

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

To drukuje:

1355270400000

Jeśli potrzebujesz godziny na początku dnia w określonej strefie czasowej, określ tę strefę zamiast czasu UTC, na przykład:

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

Zgodnie z oczekiwaniami daje to nieco inny wynik:

1355252400000

Kolejna kwestia, na którą należy zwrócić uwagę, pamiętaj o podaniu ustawień regionalnych do swojego DateTimeFormatter. Uznałem, że grudzień był angielski, są inne języki, w których ten miesiąc nazywa się tym samym, więc proszę samemu wybrać odpowiednią lokalizację. Jeśli nie podasz ustawień regionalnych, program formatujący użyje ustawień regionalnych maszyny JVM, które mogą działać w wielu przypadkach, a następnie pewnego dnia niespodziewanie zakończy się niepowodzeniem, gdy uruchomisz aplikację na urządzeniu z innymi ustawieniami regionalnymi.

Ole VV
źródło
9

Przyjrzyj się SimpleDateFormatklasie, która może analizować a Stringi zwracać a Dateoraz getTimemetodę Dateclass.

Awerroes
źródło
7
  • Najpierw przekonwertuj ciąg na java.util.Dateużycie programu formatującego datę
  • Użyj funkcji getTime (), aby uzyskać liczbę milisekund od daty
Dmitriy Tarasov
źródło
3

możesz użyć simpleDateFormat, aby przeanalizować datę w postaci ciągu.

XepterX
źródło
1

Najłatwiej jest użyć Date Using Date () i getTime ()

    Date dte=new Date();
    long milliSeconds = dte.getTime();
    String strLong = Long.toString(milliSeconds);
    System.out.println(milliSeconds)
Saranga kapilarathna
źródło
1

używając uproszczonego formatu możesz to łatwo osiągnąć.

1) Najpierw przekonwertuj ciąg na java.Date przy użyciu simpledateformatter.

2) Użyj metody getTime, aby uzyskać liczbę milisekund od daty

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

więcej Przykład kliknij tutaj

Ankit jain
źródło
0

Wypróbuj poniższy kod

        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();
subrahmanyam boyapati
źródło