在以下代码timeToDisplay.format
似乎对timeToDisplay
String
没有影响。 tw.setText(timeToDisplay)
显示毫秒而不是预期的MM:SS。我毫不高兴地重建了这个项目。
代码:
TextView tw = (TextView) getView().findViewById(R.id.textView_time);
long millis = intent.getLongExtra("stamp", 0L);
String timeToDisplay = String.valueOf(millis);
timeToDisplay.format("%d min, %d sec",
TimeUnit.MILLISECONDS.toMinutes(millis),
TimeUnit.MILLISECONDS.toSeconds(millis) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));
tw.setText(timeToDisplay);
答案 0 :(得分:3)
Java字符串是不可变的。您必须将结果分配回变量:
timeToDisplay = String.format(...);
在您的情况下,您根本不需要将millis
变成字符串;格式化程序只需要你为它计算的数字。
答案 1 :(得分:0)
调用timeToDisplay.format()
不会更改您的实际timeToDisplay
引用。但是,它将返回新字符串。将其添加到您的代码中:
String formattedTime = timeToDisplay.format("%d min, %d sec",
TimeUnit.MILLISECONDS.toMinutes(millis),
TimeUnit.MILLISECONDS.toSeconds(millis) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));
然后,在formattedTime
setText
答案 2 :(得分:0)
字符串不可变。试试:
timeToDisplay = timeToDisplay.format("%d min, %d sec",
TimeUnit.MILLISECONDS.toMinutes(millis),
TimeUnit.MILLISECONDS.toSeconds(millis) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));
答案 3 :(得分:0)
tw.setText(timeToDisplay.format("%d min, %d sec",
TimeUnit.MILLISECONDS.toMinutes(millis),
TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis))));
或者,您可以将timeToDisplay.format("%d min, %d sec",
TimeUnit.MILLISECONDS.toMinutes(millis),
TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis))));
的值赋给变量并将其传递给tw.setText()。
答案 4 :(得分:-1)
字符串是不可变的,你必须以这种方式重新分配:
timeToDisplay = timeToDisplay.format("%d min, %d sec",
TimeUnit.MILLISECONDS.toMinutes(millis),
TimeUnit.MILLISECONDS.toSeconds(millis) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));
这意味着格式化方法无法更改timeToDisplay
它只返回一个格式化的新字符串。