【问题标题】:Years are incorrect in Android's date classesAndroid 的日期类中的年份不正确
【发布时间】:2010-10-18 17:41:35
【问题描述】:

我正在尝试比较日期,但我发现我的代码出错了,但我不知道为什么。

我正在尝试将日期与今天的日期进行比较(仅使用公历)。我已经打印出代码中提到的今天的日期,并且在一个地方它神奇地从 2010 年变为 3910 年(今天的年份 + 1900 年)。

有人知道这是什么原因吗?

//Prints out 2010   
System.out.println("TodaysDate.getYear():\t"+todaysDate.getYear());
//Prints out 2010
System.out.println(todaysDate);

//Getting a year from a string (it is 2010)
todaysDate.setYear(Integer.parseInt(yea));

//Prints out 2010   
System.out.println("TodaysDate.getYear():\t"+todaysDate.getYear());
//Prints out 3910   
System.out.println(todaysDate);

【问题讨论】:

    标签: android date gregorian-calendar


    【解决方案1】:

    日期通常存储为“自 1900 年以来的年数”,因此您需要对其进行补偿。你可以在Date的文档中看到:http://developer.android.com/reference/java/util/Date.html

    编辑:我应该提到我作为评论发布的内容。 Jeff Sharkey 建议不要使用 Calendar 类(如果你也在使用它)。 android.text.format.DateUtils 更轻量级(当您第一次加载 Calendar 类时,您会看到手机会停顿一点,尤其是在旧手机上)。 DateUtils 适用于 Android 1.5 及更高版本。

    【讨论】:

    • 正要发布同样的内容。 setYear 的 javadoc 显示它将 1900 添加到您传入的值。它还显示不推荐使用 setYear 并改用 Calendar.set(Calendar.YEAR, year + 1900)。但看起来你可以只使用 Calendar.set(Calendar.YEAR, year),因为你的年份值没有被 1900 抵消,所以它可以与上面的代码一起使用。
    • 嗯。这很奇怪。谢谢。但是为什么“todaysDate.getYear()”每次都会打印出 2010 年呢?
    • Calendar 类是非常笨拙的。 Jeff Sharkey 建议不要使用它 - 从 Android 1.5 开始,引入了 android.text.format.DateUtils 作为更轻量级的替代方案。
    • @Teh:因为 getYear() 还返回自 1900 年以来的年数,所以如果它试图表示的实际年份是 3910,那么 getYear() 返回 2010。
    • 谢谢大家。我现在应该可以继续了:)
    猜你喜欢
    • 1970-01-01
    • 2020-02-11
    • 2019-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    相关资源
    最近更新 更多