[英]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.