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

标签 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() 使用从 strings.xml 读取的模式创建一个 SimpleDateFormat 对象。 parseDatabaseDate() 使用由常量模式 yyyy-MM-dd 构造的 SimpleDateFormat 解析数据库中的日期。

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

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

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

最佳答案

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

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

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

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

关于android - 在 Android 上以本地化格式显示日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2117565/

相关文章:

安卓在后台播放音乐

java - 使用数据库的 Struts2 国际化

android - 如何在 Flutter 中以编程方式更改应用程序的语言?

wordpress - 为什么使用 GNU gettext?

Android LatinIME 词典

android - Android中ExifInterface类的所有方向常量是什么意思?

Android 4 浏览器 : input elements combined with input elements in a list result in display errors

iOS - 在 Localizable.strings 中用粗体字符串强调

.net - 通过网络服务查找客户的时区和文化

ios - 使用 SwiftGen 在运行时更改语言