Ich habe ein Datum in einer Zeichenfolge, so etwas wie "12-Dezember-2012". Wie kann ich dies in Millisekunden (lang) umrechnen?
quelle
Ich habe ein Datum in einer Zeichenfolge, so etwas wie "12-Dezember-2012". Wie kann ich dies in Millisekunden (lang) umrechnen?
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();
}
SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
Date date = (Date)formatter.parse("12-December-2012");
long mills = date.getTime();
Schauen Sie sich eine SimpleDateFormat
Klasse an, die a analysieren kann, String
und geben Sie a Date
und die getTime
Methode der Date
Klasse zurück.
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 SimpleDateFormat
und Date
mir ein bisschen rätselhafter sind. java.time
Die 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.
java.util.Date
Datum mit FormatiererAm 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)
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
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();