【问题标题】:Calendar.get(Calendar.YEAR) returns wrong year [duplicate]Calendar.get(Calendar.YEAR)返回错误的年份[重复]
【发布时间】:2017-09-01 09:05:56
【问题描述】:

我试图从日期中获取年份,并且使用 Calendar.get(Calendar.YEAR) 我得到的是 3917 年而不是 2017 年?但是当我尝试使用date.getYear() 检查输出时,它会返回正确的年份。

Date date = new Date(year, month, day);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
Log.d(TAG, "onClick: year "+date.getYear());
Log.d(TAG, "onClick: year "+calendar.get(Calendar.YEAR));

输出:

点击:2017 年

点击:3917 年

日期类显示正确的年份,但日历显示错误的年份

【问题讨论】:

  • 你可以在这里阅读解释stackoverflow.com/questions/26255636/…
  • 不要使用日期,使用最新的 API LocalDate
  • 您应该使用LocalDate.of 来代替这个过时的解决方案。然后使用LocalDate.getYear()
  • @PeterBruins 在我的问题中,您可以看到 date.getYear() 有效,但 Calendar.YEAR 无法正常工作。在提供的链接上,date.getYear() 存在问题而不是 Calendar.Year,因为它在我的问题中
  • @MiljanRakita 不,它不会返回您想要的。 Date 的文档说它使用来自 1900 的年份值,所以它应该给你 117 到 2017 年的日期。你没有正确使用它,因为 Calendar 阅读文档以了解收到的值,它将1900 添加到 2017 以获得等效日期,给出 3917。您只是使用错误。

标签: java date calendar


【解决方案1】:

Here'sDate 类的 Javadoc,这是关于您正在使用的构造函数的说明:

已弃用。从 JDK 1.1 版开始,由 Calendar.set(year + 1900, 月, 日) 或 GregorianCalendar(年 + 1900, 月, 日)。

分配一个 Date 对象并对其进行初始化,以便它表示 午夜,当地时间,在指定的一天的开始 年、月和日期参数。

另外,这里是对参数的解释:

参数

year - 减去 1900 的年份。

month - 之间的月份 0-11。

date - 1-31 之间的月份中的某天。

当它将1900 添加到您传递的值中时,您得到的结果年份是3917

【讨论】:

  • 既然我们在这里(并且值已经在那里),月份在他的代码中也将不正确,因为它是基于 0 的(在两个类中)。
【解决方案2】:

正如在其他答案中所说,Date 年份是来自1900 的年份数(the complete answer of Darshan Mehta 中的更多信息)。

但是有一个更简单的解决方案,使用LocalDate.of 来创建yearmonthday 的日期并使用LocalDate.getYear 来获取特定年份:

java.time.LocalDate date = java.time.LocalDate.of(2017, 9, 1);
System.out.println(date.getYear());

2017

java.util.Date 已过时(并且您使用的所有方法都已弃用),您应该查看更具可读性和功能的java.time api

【讨论】:

    【解决方案3】:

    日期方法:

    public Date(int year, int month, int day) {
        GregorianCalendar cal = new GregorianCalendar(false);
        cal.set(1900 + year, month, day);
        milliseconds = cal.getTimeInMillis();
        }
    

    如您所见,1900 已添加到您的日历日期。结果是 3917

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多