如何使用 SimpleDateFormat 解析只有月份和年份的日期

How to parse date with only month and year with SimpleDateFormat

我正在处理卡的到期日期。我有一个 API,我将在其中以“yyMM”格式获取到期日期,格式为“String”。我在这里尝试使用

SimpleDateFormat with 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

在这里你可以看到我将 11 作为月份传递,但它正在将其转换为 Oct 而不是 Nov

为什么

我可以使用哪些其他选项将带 yyMM 的字符串转换为带时区的日期?

你应该使用 Java 8 YearMonth class.

String a = "2011";
DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("yyMM");
YearMonth yearMonth = YearMonth.parse(a, inputFormat);

DateTimeFormatter outputFormat = DateTimeFormatter.ofPattern("MMMM yyyy");
System.out.println(yearMonth.format(outputFormat));

输出

November 2020

您解析得很好,但它是以 PDT(您当地的时区)打印的。

Sat Oct 31 17:00:00 PDT 2020

好吧,Date 不跟踪时区。 Calendar class 确实如此,这是格式化程序内部的。但是,默认打印行为仍然是当前时区。

如果逻辑上将此输出转换回 UTC,则为 11 月 1 日,因为 PDT 是 UTC-7。

基本上,使用java.time classes。在此处查看更多信息 How can I get the current date and time in UTC or GMT in Java?