Uw formaat, YYYY-mm-dd'T'HH:MM:ss'Z'
Is niet correct. Laten we alles bespreken wat er mis is met dit formaat.
- Je hebt
Y
. gebruikt in plaats vany
: Het symboolY
wordt gebruikt voorWeek year
terwijly
wordt gebruikt voorYear
. Controleer Verschil tussen jaar-van- tijdperk en weekgebaseerd jaar? om er meer over te leren. - U heeft
mm
. gebruikt voor maand: Het juiste symbool voor de maand isM
. - Je hebt
MM
. gebruikt minutenlang: Het juiste symbool voor de minuut ism
. - U heeft
Z
. bijgevoegd tussen enkele aanhalingstekens: Het symbool,Z
wordt gebruikt voorTime zone
terwijl'Z'
is niets anders dan een letterlijk karakter. Waarschijnlijk wilt u de tijdzone-offset van+00:00
. opmaken alsZ
en hiervoor zou je in feiteX
. moeten gebruiken .
Het juiste formaat is dus als volgt:
yyyy-MM-dd'T'HH:mm:ssX
Een demo met het voorgestelde formaat:
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX", Locale.ENGLISH);
Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime();
System.out.println(sdf.format(date));
}
}
Uitvoer:
2021-01-14T08:13:01Z
Merk op dat de date-time API van java.util
en hun opmaak-API, SimpleDateFormat
zijn verouderd en foutgevoelig. Het wordt aanbevolen om ze helemaal niet meer te gebruiken en over te schakelen naar de moderne datum-tijd-API
.
- Om welke reden dan ook, als je je aan Java 6 of Java 7 moet houden, kun je ThreeTen-Backport welke backports de meeste java.time functionaliteit naar Java 6 &7.
- Als je voor een Android-project werkt en je Android API-niveau is nog steeds niet compatibel met Java-8, controleer dan Java 8+ API's beschikbaar via ontsuikering en ThreeTenABP gebruiken in Android Project .
Gebruik Date#toInstant
om een java.util.Date
. te converteren object (het oude type) naar java.time.Instant
(het moderne type). Instant
vertegenwoordigt een onmiddellijk punt op de tijdlijn en zou net genoeg moeten zijn voor de meeste van uw JSON-bewerkingen. De Instant#toString
retourneert de datum-tijd-tekenreeks met UTC-tijdzone-offset die voldoet aan de ISO-8601-normen
.
Demo:
import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime();
Instant instant = date.toInstant();
// Print the value of instant#toString
System.out.println(instant);
OffsetDateTime odt = instant.atOffset(ZoneOffset.UTC);
System.out.println(odt);
// Custom format
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssX", Locale.ENGLISH);
System.out.println(dtf.format(odt));
}
}
Uitvoer:
2021-01-14T08:28:35.659Z
2021-01-14T08:28:35.659Z
2021-01-14T08:28:35Z