So konvertieren Sie eine Zeichenfolge Datum in lange Millsekunden

86

Ich habe ein Datum in einer Zeichenfolge, so etwas wie "12-Dezember-2012". Wie kann ich dies in Millisekunden (lang) umrechnen?

Dawood Ahmed
quelle

Antworten:

149

Verwenden von 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
quelle
16
SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
Date date = (Date)formatter.parse("12-December-2012");
long mills = date.getTime();
Ram Kiran
quelle
9

Schauen Sie sich eine SimpleDateFormatKlasse an, die a analysieren kann, Stringund geben Sie a Dateund die getTimeMethode der DateKlasse zurück.

Averroes
quelle
9

Es ist an der Zeit, dass jemand die moderne Antwort auf diese Frage gibt. Im Jahr 2012, als die Frage gestellt wurde, waren die damals auch veröffentlichten Antworten gute Antworten. Warum die 2016 veröffentlichten Antworten auch die damals längst veralteten Klassen verwenden SimpleDateFormatund Datemir ein bisschen rätselhafter sind. java.timeDie moderne Java-API für Datum und Uhrzeit, auch als JSR-310 bekannt, ist viel besser zu handhaben. Sie können es unter Android über ThreeTenABP verwenden. Weitere Informationen finden Sie unter : Verwendung von ThreeTenABP in Android Project .

Für die meisten Zwecke empfehle ich die Verwendung der Millisekunden seit der Epoche zu Beginn des Tages in UTC . Um diese zu erhalten:

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

Dies druckt:

1355270400000

Wenn Sie die Uhrzeit zu Beginn des Tages in einer bestimmten Zeitzone benötigen, geben Sie diese Zeitzone anstelle von UTC an, zum Beispiel:

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

Wie erwartet ergibt sich ein etwas anderes Ergebnis:

1355252400000

Ein weiterer zu beachtender Punkt: Denken Sie daran, Ihrem Gebietsschema ein Gebietsschema anzugeben DateTimeFormatter. Ich habe Dezember als Englisch genommen. Es gibt andere Sprachen, in denen dieser Monat gleich heißt. Wählen Sie also selbst das richtige Gebietsschema aus. Wenn Sie kein Gebietsschema angegeben haben, verwendet der Formatierer die Gebietsschemaeinstellung der JVM, die in vielen Fällen funktioniert, und schlägt dann eines Tages unerwartet fehl, wenn Sie Ihre App auf einem Gerät mit einer anderen Gebietsschemaeinstellung ausführen.

Ole VV
quelle
7
  • Erstes convert Zeichenfolge java.util.DateDatum mit Formatierer
  • Verwenden Sie getTime () , um die Anzahl der Millisekunden ab dem Datum zu ermitteln
Dmitriy Tarasov
quelle
3

Mit simpleDateFormat können Sie das Zeichenfolgendatum analysieren.

XepterX
quelle
0

Am einfachsten ist es, das Datum mit Date () und getTime () zu verwenden.

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

Mit simpledateformat können Sie es leicht erreichen.

1) Konvertieren Sie zuerst einen String in java.Date mit dem simpledateformatter.

2) Verwenden Sie die getTime-Methode, um die Anzahl der Millisekunden ab dem Datum zu ermitteln

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

mehr Beispiel hier klicken

Ankit Jain
quelle
-1

Versuchen Sie es mit dem folgenden Code

        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
quelle