如何使用 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?
我正在处理卡的到期日期。我有一个 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?