我已经以这种方式为日历对象设置了日期......
Calendar lastCheckUp = Calendar.getInstance();
lastCheckUp.set(year, month+1, day);
现在,当我使用控制台打印出来时
System.out.println(lastCheckUp);
我得到了正确的值...
07-18 11:59:13.903: I/System.out(1717): java.util.GregorianCalendar[time=1365834504001,areFieldsSet=true,lenient=true,zone=Asia/Calcutta,firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2013,MONTH=3,WEEK_OF_YEAR=15,WEEK_OF_MONTH=2,DAY_OF_MONTH=13,DAY_OF_YEAR=103,DAY_OF_WEEK=7,DAY_OF_WEEK_IN_MONTH=2,AM_PM=0,HOUR=11,HOUR_OF_DAY=11,MINUTE=58,SECOND=24,MILLISECOND=1,ZONE_OFFSET=19800000,DST_OFFSET=0]
所以我假设日历对象中的所有值都设置正确。
但是当我尝试使用它访问它时
mTextViewLastCheckDate.setText(new StringBuilder().append(lastCheckUp.DAY_OF_MONTH)
.append("/").append(lastCheckUp.MONTH).append("/").append(lastCheckUp.YEAR)
.append(" "));
我只得到默认值...
也就是说,我的 TextView 输出为 5/2/1
我做错了什么?
最佳答案
您正在使用 lastCheckup.MONTH
、lastCheckup.DAY_OF_MONTH
等。这些是常量字段 - 用于访问特定日历的值,你需要
int month = lastCheckUp.get(Calendar.MONTH);
等等。阅读documentation of Calendar
有关如何使用它的更多详细信息。
但是,您还需要了解 Calendar
中的月份是从 0 开始的,因此它看起来仍然不正确。另外,您几乎肯定希望将日期和月份填充为 0。使用 SimpleDateFormat
来完成此操作会更好。
// Not sure why you want a space at the end, but...
DateFormat format = new SimpleDateFormat("dd/MM/yyyy ");
mTextViewLastCheckDate.setText(format.format(lastCheckup.getTime());
您还应该考虑要使用哪个时区和区域设置。上面的代码只是使用默认的。
编辑:请注意这一行:
lastCheckUp.set(year, month+1, day);
几乎肯定是错误的。我们不知道 month
在这里真正意味着什么,但在 set
调用中,它应该在 0-11 范围内(假设是公历)。
关于java - android 中的 Calendar 对象仅返回默认值。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17716227/