如何使用SimpleDateFormat

时间:2017-10-16 23:18:20

标签: java date datetime simpledateformat date-parsing

我正在处理卡的到期日期。我有一个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的字符串转换为带时区的日期?

2 个答案:

答案 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?