Hoe de “jjjj-MM-dd’T’HH:mm:ss.SSSXXX” datumnotatie ontleden naar eenvoudig in Android?

Hoe kan ik deze datum 2018-01-09T11:11:02.0+03:00ontleden naar de indeling dd.MM.yyyy hh:mmin Android?

En wat betekent Ttussen 09en 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 SimpeDateFormatgebruiken 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 hhin 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 Tin het midden geeft het begin van het tijdgedeelte aan om het te scheiden van het datumgedeelte. De one-arg OffsetDateTime.parsemethode parseert ISO 8601, daarom hadden we geen formatter nodig voor het ontleden. OffsetDateTimeen DateTimeFormatterzijn klassen van java.time, de moderne Java-API voor datum en tijd.

Vraag: kan ik java.time gebruiken op Android?

Ja, java.timewerkt 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.bpmet subpakketten (mijn code is getest met deze imports).

Links

Other episodes