我正在使用卡的到期日期。我有一個API,我將在「yyMM」格式中將過期日期設爲「字符串」。在這裏,我試圖用如何使用SimpleDateFormat解析日期只有月份和年份
的SimpleDateFormat與TimeZone.getTimeZone( 「UTC」)
所以我的代碼是這樣
String a= "2011";
SimpleDateFormat formatter = new SimpleDateFormat("yyMM");
formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = formatter.parse(a);
System.out.println(date);
現在的問題是,當我路過2011它給出的是Sat Oct 31 17:00:00 PDT 2020
在這裏,你可以看到我通過爲月,但它是轉變去它10月而不是11月。
爲什麼?
我還可以使用其他選項將字符串yyMM
轉換爲帶有時區的日期?
爲什麼問題說'MMyy',但代碼是'yyMM'? java.util.Date類自1970年1月1日起將日期/時間存儲爲毫秒。它沒有時區的概念,所以當你調用'toString()',就像'print()'調用隱式完成的那樣,它將使用**默認時區**格式化該值,這明顯地是你的「PDT」。如果你想要別的東西,可以使用帶有明確指定的'TimeZone'的'SimpleDateFormat'。 – Andreas
您應該使用Java 8 ['YearMonth'](https://docs.oracle.com/javase/8/docs/api/java/time/YearMonth.html)類。 – Andreas
您的解析是正確的。當你打印Date對象時,你會隱式地調用它的'toString'方法,這又會給你提供不正確的輸出。這是許多跳過「Date」和「SimpleDateFormat」類的過期案例。而是使用稱爲java.time或JSR-310的現代Java日期和時間API。 –