ISO 8601 String naar datum/tijd-object in Android

Ik heb een tekenreeks in de standaard ISO 8601-indeling die de datum/tijd bevat die wordt geretourneerd door een webservice zoals:

String dtStart = "2010-10-15T09:27:37Z"

Hoe krijg ik dit in een object zoals Tijd of Datum? Ik wil het in eerste instantie in een ander formaat uitvoeren, maar zal er later andere dingen mee moeten doen (d.w.z. misschien in een ander formaat gebruiken).

Proost


Antwoord 1, autoriteit 100%

String dtStart = "2010-10-15T09:27:37Z";  
SimpleDateFormat  format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");  
try {  
    Date date = format.parse(dtStart);  
    System.out.println(date);  
} catch (ParseException e) {  
    e.printStackTrace();  
}

Dit is wat u zoekt. Er is een bestaande postover dit probleem.


Antwoord 2, autoriteit 5%

Deze vraag werd in 2010 gesteld en destijds was het juist dat SimpleDateFormatof Joda-Time de tools zouden zijn die je zou moeten gebruiken. Het is alweer een tijdje geleden. Gebruik vandaag

   Instant iStart = Instant.parse(dtStart);

Ja, zo simpel is het. Je tekenreeks is in ISO 8601-indeling en de klassen van java.time, de moderne Java-datum- en tijd-API, ontleden ISO 8601 zonder enige expliciete opmaak. Instantis slechts een van die klassen.

Bewerken: Vraag: vereist Android API 26 – hoe zit het met het ondersteunen van oudere versies?

Ja, java.timewerkt prima op oudere en nieuwere Android-apparaten. Het vereist alleen Java 6.

  • In Java 8 en hoger en op nieuwere Android-apparaten (vanaf API-niveau 26) 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 u de datum- en tijdklassen importeert uit org.threeten.bpmet subpakketten.

Links


Antwoord 3, autoriteit 2%

U kunt Java’s SimpleDateFormat ontledingsmethodeof gebruik DateTimeFormat van JodaTimeom een ​​DateTimeFormatter te maken en dienovereenkomstig naar een DateTime-objectontleden


Antwoord 4

Als je de huidige java.timeof threetenbpgebruikt, ontleden je het gewoon als volgt:

ZonedDateTime dt = ZonedDateTime.parse(dtStart);

Je hebt nu toegang tot datum- en tijdwaarden zoals jaar, maand, uur, enz.


Antwoord 5

Stel dat u het tijdsverschil wilt berekenen op basis van de kolomgescheiden waarden.
voltooien–> 15:24:04
start–> 09:27:37
Zonder Dateen SimpleDateFormatte gebruiken, deed ik het als volgt:

String tStart = "09:27:37";
String tFinish = "15:24:04";
String[] sTimeHourMinSec = tStart.split(":");
int sHour = Integer.valueOf(sTimeHourMinSec[0]);
int sMin = Integer.valueOf(sTimeHourMinSec[1]);
int sSec = Integer.valueOf(sTimeHourMinSec[2]);
String[] fTimeHourMinSec = tFinish.split(":");
int fHour = Integer.valueOf(fTimeHourMinSec[0]);
int fMin = Integer.valueOf(fTimeHourMinSec[1]);
int fSec = Integer.valueOf(fTimeHourMinSec[2]);
int diffTotSec = (fHour - sHour) * 3600 + (fMin - sMin) * 60 + (fSec - sSec);
int diffHours = diffTotSec / 3600;
int diffMins = (diffTotSec % 3600) / 60;
int diffSecs = (diffTotSec % 3600) % 60;
System.out.println("Difference: " + diffHours + " h " + diffMins + " m " + diffSecs + " sec");

Other episodes