在Android上以本地化格式显示date

我目前正在为Android构build我的第一个应用程序。 我遇到的麻烦是与SimpleCursorAdapter有关的date的存储和本地化显示。 我有一个类封装访问SQLitedatabase与三个表。 这个类负责以ISO格式存储所有date(“yyyy-MM-dd”)。 当从数据库中读取date值并显示在屏幕上时,我希望它们以本地化的格式进行格式化。 这是我提出的方法。 它使用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()使用从strings.xml读取的模式创build一个SimpleDateFormat对象。 parseDatabaseDate()使用一个常量模式yyyy-MM-dd构造的SimpleDateFormatparsing数据库中的date。

虽然这个代码工作得很好,我想知道是否有更好的方法来做到这一点。 我不喜欢的是我需要:

  • 两个SimpleDateFormat对象(一个在parseDatabaseDate()中用于parsingSQLiteDatabase的datestring,另一个用于格式化值)
  • 一个java.util.Date对象被创build,然后立即丢弃
  • 相当多的(在我看来)样板代码。

所以这就是为什么我问:有没有更好的方式来显示本地化格式的date?

Solutions Collecting From Web of "在Android上以本地化格式显示date"

如果您想跳过parsing,则可以将date存储为长整型。 然后,您可以使用longparsing来创build一个新的Date对象。

这不是直接关系到你的问题,但是:你可能要考虑的一件事是android.text.format.DateFormat获取你的date格式化。 这样,您可以将date/时间格式化为用户的区域设置,而不是您自己的预设。 它也可能使你的代码更简单,因为你不需要再创build自己的SimpleDateFormat。

有了这两件事情,你可以摆脱对自己的方法的调用:

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