繁体   English   中英

如何使用SimpleDateFormat仅用月份和年份解析日期

[英]How to parse date with only month and year with SimpleDateFormat

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

具有TimeZone.getTimeZone(“ UTC”)的SimpleDateFormat

所以我的代码就像

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字符串转换为带时区的Date?

您应该使用Java 8 YearMonth类。

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

好吧,日期不跟踪时区。 Calendar类可以,这在格式化程序内部。 但是,默认的打印行为仍是当前时区。

如果您将此输出逻辑地转换回UTC,由于PDT为UTC-7,它将是11月1日。

基本上,使用java.time类。 在此处查看其他信息如何使用Java中的UTC或GMT获取当前日期和时间?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM