我正在做一个小游戏。当游戏第一次启动时,我在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);
}
怎么可能出错?
答案 0 :(得分:9)
没什么不对的。您刚刚没有查看所调用方法的文档Date.getYear()
:
返回一个值,该值是从包含或以此Date对象表示的时间开始的年份减去1900的结果,如本地时区中所解释的那样。
请注意,您应该收到一条警告,指出您正在使用已弃用的API:请勿忽略这些警告。
另外,请帮自己一个忙,不要自己做格式化:改用SimpleDateFormat
。 (或者理想情况下,使用Joda Time代替...)这样你就可以避免月错误了......你可能没有注意到你因为基于0的月份,这对Calendar
和Date
都很常见。
答案 1 :(得分:1)
答案 2 :(得分:1)
您正在使用getTime,它返回一个日期对象。日期基于0 = 1900。所以这是预期的产出。请改用SimpleDateFormat。
通过以下方式获得创建Y2K错误的荣誉:)