java - android 中的 Calendar 对象仅返回默认值。为什么?

标签 java android calendar android-calendar

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

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.MONTHlastCheckup.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/

相关文章:

java - 使用 AlarmManager 设置不同时区的闹钟

date - 如何使用 elisp 让用户从日历中选择日期?

java - sybase数据库要一次性更新吗?

java - 哪种方式更好地从 http 获取响应?为什么?

java - org.apache.axiom.om.util.AXIOMUtil 无法解析

java - 这是否正确写入文本文件?

java - android中简单的递增/递减程序

java - 从日历转换时sql.Timestamp 1秒错误

android - getContactsFromFirebase() 方法返回一个空列表

android - 如何更新 android ListView 中的特定列表项