我正在使用卡的到期日期。我有一个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。 –