Calender.YEAR 没有打印正确的值

Calender.YEAR not printing the right value

我正在解析从用户查询收到的日期和来自 XML 文件的另一个日期。 当我只想获得年份时,它打印 1 而不是年份,使用:

calender.YEAR

这是代码:

Elements date = doc.getElementsByTag("DATE");

DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
Date inputDate = dateFormat.parse(obj.tryParse(dateFrom));
Date xmlDate = dateFormat.parse(obj.tryParse(date.get(0).text()));

Calendar calInput = Calendar.getInstance();
Calendar calXml = Calendar.getInstance();

calInput.setTime(inputDate);
calXml.setTime(xmlDate);

System.out.println(calInput.YEAR +" "+ calXml.YEAR +" = "+calInput.getTime().toString()+"|||"+ calXml.getTime().toString());
if(calInput.YEAR != calXml.YEAR)
    continue;

这是输出示例:

Info:   1 1 = Wed Jan 01 00:00:00 IST 2003|||Tue Jan 01 00:00:00 IST 2002
Info:   1 1 = Wed Jan 01 00:00:00 IST 2003|||Tue Jan 01 00:00:00 IST 2002
Info:   1 1 = Wed Jan 01 00:00:00 IST 2003|||Tue Jan 01 00:00:00 IST 2002
Info:   1 1 = Wed Jan 01 00:00:00 IST 2003|||Tue Jan 01 00:00:00 IST 2002
Info:   1 1 = Wed Jan 01 00:00:00 IST 2003|||Tue Jan 01 00:00:00 IST 2002
Info:   1 1 = Wed Jan 01 00:00:00 IST 2003|||Tue Jan 01 00:00:00 IST 2002
Info:   1 1 = Wed Jan 01 00:00:00 IST 2003|||Tue Jan 01 00:00:00 IST 2002
Info:   1 1 = Wed Jan 01 00:00:00 IST 2003|||Tue Jan 01 00:00:00 IST 2002
Info:   1 1 = Wed Jan 01 00:00:00 IST 2003|||Tue Jan 01 00:00:00 IST 2002
Info:   1 1 = Wed Jan 01 00:00:00 IST 2003|||Tue Jan 01 00:00:00 IST 2002
Info:   1 1 = Wed Jan 01 00:00:00 IST 2003|||Sun Feb 01 00:00:00 IST 2004
Info:   1 1 = Wed Jan 01 00:00:00 IST 2003|||Mon Apr 01 00:00:00 IDT 2002
Info:   1 1 = Wed Jan 01 00:00:00 IST 2003|||Mon Apr 01 00:00:00 IDT 2002
Info:   1 1 = Wed Jan 01 00:00:00 IST 2003|||Mon Apr 01 00:00:00 IDT 2002
Info:   1 1 = Wed Jan 01 00:00:00 IST 2003|||Mon Apr 01 00:00:00 IDT 2002
Info:   1 1 = Wed Jan 01 00:00:00 IST 2003|||Mon Apr 01 00:00:00 IDT 2002
Info:   1 1 = Wed Jan 01 00:00:00 IST 2003|||Mon Apr 01 00:00:00 IDT 2002
Info:   1 1 = Wed Jan 01 00:00:00 IST 2003|||Mon Apr 01 00:00:00 IDT 2002
Info:   1 1 = Wed Jan 01 00:00:00 IST 2003|||Mon Apr 01 00:00:00 IDT 2002

calXml.YEAR应该写成Calendar.YEAR, because it is a constant (public static final) value to be used as a parameter to methods like get(int field) and add(int field, int amount).

要获取年份,请调用 calXml.get(Calendar.YEAR)

Andreas 的 是正确的。

java.time

或者,您可以使用 Java 8 及更高版本中内置的新 java.time 框架。旧的日期时间 类 是一团糟,应该避免。

从 java.util.Date 转换为 java.time。即时。 Instant 是 UTC 时间轴上的一个时刻。

Instant instant = yourJavaUtilDate.toInstant();

应用时区。您问题的代码隐含地取决于 JVM 当前的默认时区。我建议最好明确指定您的 desired/expected 时区。时区对于确定日期和年份至关重要。

ZoneId zoneId = ZoneId.of( "Asia/Kolkata" ); 
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );

现在我们可以提取年份了。

int year = zdt.getYear();

或者更有趣的是,我们可以得到一个Year对象。

Year year = Year.from( zdt );
Boolean isLeapYear = year.isLeap();
int yearNumber = year.getValue();