Hoe kan ik deze datum 2018-01-09T11:11:02.0+03:00
ontleden naar de indeling dd.MM.yyyy hh:mm
in Android?
En wat betekent T
tussen 09
en 11
?
Bedankt.
Ik weet niet hoe de back-endontwikkelaar aan dit formaat is gekomen.
Ik gebruik Java.
Antwoord 1, autoriteit 100%
Als je java gebruikt, kun je SimpeDateFormat
gebruiken met patronen:
String date = "2018-01-09T11:11:02.0+03:00";
SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
SimpleDateFormat output = new SimpleDateFormat("dd.MM.yyyy hh:mm");
Date d = null;
try {
d = dateformat.parse(date /*your date as String*/);
} catch (ParseException e) {
e.printStackTrace();
}
String formattedDate = output.format(d);
Log.d("Date format", "output date :" + formattedDate);
De uitvoer is:
D/Date format: uitvoerdatum: 09.01.2018 09:11
BEWERK:Met dank aan @OleV.V., voor API > 26, of met behulp van ThreeTenABPdie we kunnen gebruiken
DateTimeFormatter, wij kan zoiets doen
String date = "2018-01-09T11:11:02.0+03:00";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
DateTimeFormatter formatterOut = DateTimeFormatter.ofPattern("dd.MM.yyyy hh:mm");
LocalDate parsedDate = LocalDate.parse(date, formatter);
String formattedDate = formatterOut.format(parsedDate);
Log.d("Date format", "output date :" + formattedDate);
Antwoord 2, Autoriteit 150%
U kunt dit doen met simpledateFormat .
Hier is een getest voorbeeld in Java:
String dateString = "2018-01-09T11:11:02.0+03:00";
String inPattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX";
String outPattern = "dd.MM.yyyy hh:mm";
SimpleDateFormat inFormat = new SimpleDateFormat(inPattern, Locale.getDefault());
SimpleDateFormat outFormat = new SimpleDateFormat(outPattern, Locale.getDefault());
try {
Date inDate = inFormat.parse(dateString);
String outDate = outFormat.format(inDate);
Log.e("TEST", outDate);
} catch (ParseException e) {
e.printStackTrace();
}
Hier is een getest voorbeeld in kotlin :
val dateString = "2018-01-09T11:11:02.0+03:00"
val inPattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX"
val outPattern = "dd.MM.yyyy hh:mm"
val inFormat = SimpleDateFormat(inPattern, Locale.getDefault())
val outFormat = SimpleDateFormat(outPattern, Locale.getDefault())
val inDate = inFormat.parse(dateString)
val outDate = outFormat.format(inDate)
Log.e("TEST", outDate)
Antwoord 3, Autoriteit 100%
DateTimeFormatter desiredFormatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm");
String backendDateTimeString = "2018-01-09T11:11:02.0+03:00";
OffsetDateTime dateTime = OffsetDateTime.parse(backendDateTimeString);
String presentationDateTimeString = dateTime.format(desiredFormatter);
System.out.println(presentationDateTimeString);
Hiermee wordt afgedrukt:
01.09.2018 11:11
Let op: ik gebruik hoofdletters hh
in de tekenreeks voor het formaatpatroon. Dit geeft het uur van de dag aan van 00 tot 23. In de vraag gebruikte je kleine letters hh
, wat in een notatiepatroontekenreeks uur betekent met AM of PM van 01 tot 12, dus 00:33 zou uitkomen als 12:33 en 15:47 als 03:47. Ik dacht niet dat je dit van plan was.
Het formaat dat uw backend-ontwikkelaar heeft, 2018-01-09T11:11:02.0+03:00
, is ISO 8601. Het is wijdverbreid en het is de internationale standaard, dus het is goed dat s /hij heeft dat. De grappige T
in het midden geeft het begin van het tijdgedeelte aan om het te scheiden van het datumgedeelte. De one-arg OffsetDateTime.parse
methode parseert ISO 8601, daarom hadden we geen formatter nodig voor het ontleden. OffsetDateTime
en DateTimeFormatter
zijn klassen van java.time
, de moderne Java-API voor datum en tijd.
Vraag: kan ik java.time gebruiken op Android?
Ja, java.time
werkt prima op oudere en nieuwere Android-apparaten. Het vereist alleen minimaal Java 6.
- In Java 8 en hoger en op nieuwere Android-apparaten (API-niveau 26 en hoger) is de moderne API ingebouwd.
- In Java 6 en 7 krijg je de ThreeTen Backport, de backport van de nieuwe klassen (ThreeTen voor JSR 310; zie de links onderaan).
- Gebruik op (oudere) Android de Android-editie van ThreeTen Backport. Het heet ThreeTenABP. En zorg ervoor dat je de datum- en tijdklassen importeert uit
org.threeten.bp
met subpakketten (mijn code is getest met deze imports).
Links
- Oracle-tutorial: Datum Tijdwaarin wordt uitgelegd hoe u
java.time
. - Java Specification Request (JSR) 310, waarbij
java.time
werd voor het eerst beschreven. - ThreeTen Backport-project, de backport van
java.time
naar Java 6 en 7 (ThreeTen voor JSR-310). - ThreeTenABP, Android-editie van ThreeTen Backport
- Vraag: hoe ThreeTenABP te gebruiken in Android Project, met een zeer grondige uitleg.
- Wikipedia-artikel: ISO 8601