0

我正在做一个小游戏。当游戏第一次开始时,我会在 SharedPreferences 中以秒为单位保存自 01.01.1970 以来的时间。

现在我想以这种形式在我的屏幕上给出这个日期: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);
}

有什么错?

4

3 回答 3

9

什么都没有。您只是没有查看您正在调用的方法的文档,Date.getYear()

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

请注意,您应该已经收到警告说您正在使用已弃用的 API:不要只是忽略这些警告。

另外,帮自己一个忙,不要自己进行格式化:SimpleDateFormat改用。(或者理想情况下,使用Joda Time代替......)这样您也可以避免月份出错......您可能没有注意到由于月份是基于 0 的月份,您会休息一个月,这在CalendarDate。_

于 2013-04-02T16:59:00.567 回答
1

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

获得年份的更好方法是:

c.get(Calendar.YEAR)

于 2013-04-02T16:59:01.587 回答
1

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

不过,感谢创建 Y2K 错误 :)

于 2013-04-02T16:59:19.090 回答