在Android上以本地化格式显示日期

时间:2010-01-22 13:46:29

标签: android localization internationalization android-viewbinder

我正在构建我的第一个Android应用程序。我遇到的问题是与SimpleCursorAdapter相关的日期的存储和本地化显示。我有一个类封装了对具有三个表的SQLitedatabase的访问。该类负责以ISO格式存储所有日期(“yyyy-MM-dd”)。当从数据库中读取日期值并在屏幕上显示时,我希望它们以本地化格式进行格式化。这是我提出的方法。它使用ViewBinder进行格式化:

adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
    @Override
    public boolean setViewValue(View view, Cursor cursor,
            int columnIndex) {
        if (view.getId() == R.id.text1) {
            ((TextView) view).setText(getDateFormatView().format(
                parseDatabaseDate(cursor.getString(columnIndex))));
            return true;
        } else if (view.getId() == R.id.text2) {
            ((TextView)view).setText(
                cursor.getString(columnIndex));
          return true;
        } else {
            return false;
        }
    }
});

getDateFormatView()创建一个SimpleDateFormat对象,其模式从strings.xml读取。 parseDatabaseDate()使用SimpleDateFormat从数据库解析日期,yyyy-MM-dd使用常量模式SimpleDateFormat构建。

虽然这段代码运行得很好,但我想知道是否有更好的方法可以做到这一点。我不喜欢的是我需要:

  • 两个parseDatabaseDate()个对象(一个用于SQLiteDatabase,以便从java.util.Date解析日期字符串,另一个用于格式化值)
  • 创建的{{1}}对象然后立即丢弃
  • 很多(在我看来)样板代码。

这就是我要问的原因:是否有更好的方式以本地化格式显示日期?

1 个答案:

答案 0 :(得分:43)

如果要跳过解析,可以将日期存储为long。然后你可以使用long解析零来创建一个新的Date对象。

这与您的问题没有直接关系,但是:您可能需要考虑使用android.text.format.DateFormat来获取日期格式化程序。这样,您可以将日期/时间格式化为用户的区域设置,而不是您自己的预设。它也可能使您的代码更简单,因为您不再需要创建自己的SimpleDateFormat。

考虑到这两点,您可以摆脱对自己方法的调用:

((TextView) view).setText(android.text.format.DateFormat.getDateFormat().format(new Date(cursor.getString(columnIndex))));