Ditt format, YYYY-mm-dd'T'HH:MM:ss'Z'
är inte korrekt. Låt oss diskutera allt som är fel med detta format.
- Du har använt
Y
istället föry
: SymbolenY
används förWeek year
medany
används förYear
. Kontrollera Skillnaden mellan year-of- era och veckobaserat år? för att lära dig mer om det. - Du har använt
mm
för månad: Rätt symbol för månaden ärM
. - Du har använt
MM
i minuter: Rätt symbol för minuten ärm
. - Du har bifogat
Z
inom enstaka citattecken: Symbolen,Z
används förTime zone
medan'Z'
är inget annat än en bokstavlig karaktär. Förmodligen vill du formatera tidszonförskjutningen för+00:00
somZ
och för detta bör du faktiskt användaX
.
Så det korrekta formatet är som följer:
yyyy-MM-dd'T'HH:mm:ssX
En demo med det föreslagna formatet:
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));
}
}
Utdata:
2021-01-14T08:13:01Z
Observera att datum-tid-API:et för java.util
och deras formaterings-API, SimpleDateFormat
är föråldrade och felbenägna. Det rekommenderas att du slutar använda dem helt och hållet och byter till modernt datum-tid API
.
- Av någon anledning, om du måste hålla dig till Java 6 eller Java 7, kan du använda ThreeTen-Backport som backporterar det mesta av java.time funktionalitet till Java 6 &7.
- Om du arbetar för ett Android-projekt och din Android API-nivå fortfarande inte är kompatibel med Java-8, kontrollera Java 8+ API:er tillgängliga genom avsockring och Hur man använder ThreeTenABP i Android Project .
Använd Date#toInstant
för att konvertera ett java.util.Date
objekt (den äldre typen) till java.time.Instant
(den moderna typen). Instant
representerar en momentan punkt på tidslinjen och borde räcka precis för de flesta av dina JSON-operationer. Instant#toString
returnerar datum-tid-strängen med UTC-tidszonförskjutning som är kompatibel med ISO-8601-standarder
.
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));
}
}
Utdata:
2021-01-14T08:28:35.659Z
2021-01-14T08:28:35.659Z
2021-01-14T08:28:35Z