Calendar.getTime()。getYear()返回0113而不是2013

时间:2013-04-02 16:57:12

标签: java android calendar

我正在做一个小游戏。当游戏第一次启动时,我在SharedPreferences中以秒为单位保存自1970年1月1日以来的时间。

现在我想以这种形式在屏幕上显示这个日期:DD.MM.YYYYY

我使用了日历功能,但它返回02.04.0113所以,缺少了1900年。

这是我的代码:

private void initBornTXT() {
    SharedPreferences pref = getSharedPreferences("LIFE", 0);
    long born = pref.getLong("BIRTHDAY", 0);
    Calendar c = Calendar.getInstance();

    c.setTimeInMillis(0);

    c.add(Calendar.SECOND, (int)born);
    int year = c.getTime().getYear();
    int month = c.getTime().getMonth();
    int day = c.getTime().getDay();
    String string_born = String.format("%02d.%02d.%04d", day, month, year);
    TextView born_txt = (TextView)findViewById(R.id.textViewBorn);
    born_txt.setText(string_born);
}

怎么可能出错?

3 个答案:

答案 0 :(得分:9)

没什么不对的。您刚刚没有查看所调用方法的文档Date.getYear()

  

返回一个值,该值是从包含或以此Date对象表示的时间开始的年份减去1900的结果,如本地时区中所解释的那样。

请注意,您应该收到一条警告,指出您正在使用已弃用的API:请勿忽略这些警告。

另外,请帮自己一个忙,不要自己做格式化:改用SimpleDateFormat。 (或者理想情况下,使用Joda Time代替...)这样你就可以避免错误了......你可能没有注意到你因为基于0的月份,这对CalendarDate都很常见。

答案 1 :(得分:1)

这是正常的,记录在案的行为。请参阅JavaDoc以获取Date#getYear()

获得这一年的更好方法是:

c.get(Calendar.YEAR)

答案 2 :(得分:1)

您正在使用getTime,它返回一个日期对象。日期基于0 = 1900。所以这是预期的产出。请改用SimpleDateFormat。

通过以下方式获得创建Y2K错误的荣誉:)