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 SimpleDateFormat
of 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. Instant
is slechts een van die klassen.
Bewerken: Vraag: vereist Android API 26 – hoe zit het met het ondersteunen van oudere versies?
Ja, java.time
werkt 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.bp
met subpakketten.
Links
- Oracle-tutorial: Datum Tijdmet uitleg over het gebruik van
java.time
. - Java Specificatieverzoek (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
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.time
of threetenbp
gebruikt, 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");