0

我以这种方式为日历对象设置了日期......

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

我究竟做错了什么?

4

2 回答 2

3

您正在使用lastCheckup.MONTHlastCheckup.DAY_OF_MONTH。这些是常量字段 - 要访问特定日历的值,您需要

int month = lastCheckUp.get(Calendar.MONTH);

等等。阅读文档以Calendar获取有关您打算如何使用它的更多详细信息。

但是,您还需要了解月份是从 0 开始的Calendar,因此看起来仍然不正确。此外,您几乎可以肯定希望对日期和月份进行 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 范围内(假设是公历)。

于 2013-07-18T06:40:46.207 回答
1

您的问题是您如何访问Calendar'get方法和对Calendar常量的引用。

尝试这个:

mTextViewLastCheckDate.setText(
  new StringBuilder().append(lastCheckUp.get(Calendar.DAY_OF_MONTH))              
  .append("/")
  .append(lastCheckUp.get(Calendar.MONTH)) // beware, Calendar months are 0 based
  // please refer to Jon Skeet's solution for a better print out of your date
  // or add +1 to the month value here, instead of setting your Calendar with month + 1. 
  // Otherwise December will not work. See also comments below. 
  .append("/")
  .append(lastCheckUp.get(Calendar.YEAR))
  .append(" ")
);

顺便说一句,当您尝试从所述类的实例访问类的常量时,大多数 IDE 都会警告您。这可以帮助您找出您通常做错了什么。

于 2013-07-18T06:40:42.733 回答