Android问题显示星期几字符串

时间:2013-02-08 09:43:48

标签: android sqlite time gregorian-calendar

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

  

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 Time对象中设置日期值:

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

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

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

0 个答案:

没有答案