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
Yistället föry: SymbolenYanvänds förWeek yearmedanyanvä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
mmför månad: Rätt symbol för månaden ärM. - Du har använt
MMi minuter: Rätt symbol för minuten ärm. - Du har bifogat
Zinom enstaka citattecken: Symbolen,Zanvänds förTime zonemedan'Z'är inget annat än en bokstavlig karaktär. Förmodligen vill du formatera tidszonförskjutningen för+00:00somZoch 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