我正在处理卡的到期日期。我有一个API,我将在" yyMM "格式为" 字符串"。我在这里尝试使用
SimpleZateFormat 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 作为月份,但它正在将其转换为 10月而不是 11月。
为什么
我还可以使用其他选项将yyMM
的字符串转换为带时区的日期?
答案 0 :(得分:6)
您应该使用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
答案 1 :(得分:4)
你解析得很好,但它是用当地时区PDT打印的。
Sat Oct 31 17:00:00 PDT 2020
嗯,Date不跟踪时区。 Calendar
类有,它是格式化程序的内部。但是,默认打印行为仍然是当前时区。
如果您将此输出逻辑转换回UTC,那么它将是11月1日,因为PDT是UTC-7。
基本上,使用java.time
类。请在此处查看其他信息How can I get the current date and time in UTC or GMT in Java?