用字符串格式化SimpleDateFormat

时间:2019-04-01 22:03:07

标签: java android datetime-format

所以我有这个代码...

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


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

现在我不想显示例如02:40,而是希望它显示为2小时40分钟。但是,我尝试过将模式更改为"HH hours mm minutes",但是编译器不喜欢这样。如何获得理想的结果?

编辑:如果它考虑单数或复数形式,例如小时或小时,分钟(如果为0或1)或分钟(如果为2或更多),那将是很好的选择

2 个答案:

答案 0 :(得分:0)

我建议将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中添加更多内容,而不必更新此代码。

答案 1 :(得分:0)

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

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);