2

我见过很多在 Android 中使用 Calendar 和 GregorianCalendar 类处理日期的例子。Time最近我在 Android Developers文档中遇到了以下内容:

Time 类是 java.util.Calendar 和 java.util.GregorianCalendar 类的更快替代品。Time 类的一个实例表示时间中的一个时刻,以秒精度指定。

这促使我用更快的 Time 类函数替换所有 Calendar 函数。

这是我读取存储在 SQLite 数据库中的日期的代码:

// extract milliseconds (long) value from SQLite database
Long timeLong = note.getLong(note.getColumnIndexOrThrow(NotesDbAdapter.KEY_DATE));
Time currentTime.set(timeLong);

以下是准备整数值以填充日期选择器并在 mPickDate 按钮中显示格式化的日期字符串的部分代码:

    mDay = currentTime.monthDay;             // Day of the month (0-31)
    mMonth = currentTime.month;              // Month (0-11)
    mYear = currentTime.year;                // Year 
    mPickDate.setText(currentTime.format("%A, %d %b %Y")); // using strftime equivalent to dateFormat = new SimpleDateFormat("E, dd MMM yyyy");

请注意用于获取星期几的长字符串的格式 %A。这部分格式化代码运行良好,并显示带有格式化日期的正确字符串,包括正确的星期几。

单击 mPickDate 按钮会调用 DatePicker 小部件,该小部件允许更改和设置新日期。

以下代码显示了从 DatePicker 中新选择的日期的处理:

    private DatePickerDialog.OnDateSetListener mDateSetListener =
        new DatePickerDialog.OnDateSetListener() {

            public void onDateSet(DatePicker view, int year, int monthOfYear,
                    int dayOfMonth) {
                // new method using Time class
                currentTime.set(dayOfMonth, monthOfYear, year);

                mPickDate.setText(currentTime.format("%A, %d %b %Y"));

                // old method using GregorianCalendar class
                //mCalendar = new GregorianCalendar(year, monthOfYear, dayOfMonth);
                //mPickDate.setText(dateFormat.format(mCalendar.getTime()));                    
            }
        };

mPickDate 按钮会显示正确的日期字符串,如在日期选择器中选择的那样,但星期几 (%A) 除外,它始终显示为星期日。为什么 ?

请注意,mPickDate.SetText 代码与之前用于格式化按钮日期字符串的代码相同,从 SQLite 数据库字段中提取。

我不得不修改上面的代码,通过添加额外的代码行再次在 currentTime 时间对象中设置日期值:

            currentTime.set(dayOfMonth, monthOfYear, year);
            currentTime.set(currentTime.toMillis(true));
            mPickDate.setText(currentTime.format("%A, %d %b %Y"));

我的问题是:为什么必须在上述 DatePickerDialog.OnDateSetListener 代码中使用 currentTime.set 过程两次,才能正确显示星期几字符串?

这可能是 AndroidTime代码本身的问题(使用 SDK 版本 16)吗?

4

0 回答 0