使用字符串格式化 SimpleDateFormat

Format SimpleDateFormat with strings

所以我有这个代码...

SimpleDateFormat timeFormatter = new SimpleDateFormat("HH:minutes");


poaTimeDataText.setText(timeFormatter.format(getIntent().getLongExtra(
                ShiftLogsFragment.EXTRA_POA_TIME, 0)));

现在我希望它显示 2 小时 40 分钟,而不是显示 02:40。但是,我已经尝试将模式更改为 "HH hours mm minutes" 但编译器不喜欢那样。我怎样才能得到想要的结果?

编辑:如果它能解释单数或复数,如小时或小时、分钟(如果为 0 或 1)或分钟(如果为 2 或更多),那就太好了

我建议使用 strings.xmlSimpleDateFormat。这将使您在翻译过程中更加灵活。

首先,将此添加到您的 strings.xml

<string name="hours">%1$s Hours %2$s Minutes</string>

现在,当您获取此 String 时,您可以插入您的值。

Long hours = 3;
Long minutes = 55;

SimpleDateFormat hourFormatter = new SimpleDateFormat("HH");
SimpleDateFormat minuteFormatter = new SimpleDateFormat("mm");

String text = getString(R.string.hours, 
      hourFormattter.format(hours), 
      minuteFormatter.format(minutes)); // 03 Hours 55 Minutes

poaTimeDataText.setText(text);  

以后,如果您决定添加翻译、更改措辞,您只需在 strings.xml 中添加更多内容即可,而无需更新此代码。

创建一个字符串变量并像这样将字符串分配给它

String myString = timeFormatter.format(getIntent().getLongExtra(ShiftLogsFragment.EXTRA_POA_TIME, 0))

然后像这样拆分你的字符串

String[] separated = myString.split(":");

现在每个变量都单独存在

separated[0]; // this will contain "hours"
separated[1]; // this will contain "minutes"

定义两个变量

String hours = "";
String minutes = "";

做一些测试

if (separated[0].equals("0") || separated[0].equals("1")) {
   hours = "hour";
} else {
   hours = "hours";
}

if (separated[1].equals("0") || separated[1].equals("1")) {
   minutes = "minute";
} else {
   minutes = "minutes";
}

最后像这样将此字符串设置到您的 textView

poaTimeDataText.setText(separated[0] + hours + separated[1] + minutes);