2014-01-14 56 views
-3

在以下代码timeToDisplay.format似乎对timeToDisplayString没有影响。 tw.setText(timeToDisplay)显示毫秒而不是预期的MM:SS。我没有喜悦重建这个项目。String.format对字符串没有影响

代码:

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

这可归结为**阅读友好手册**。您的标题100%准确。 –

+0

@chrylis提供了正确的答案。 format是一个静态方法,所以应该使用'String.format(''timeToDisplay.format(''语法正确,但是有误导性并且不鼓励。 –

+0

@Glenn Lane答案已经被接受了,我不会改变它你downvoting的问题和所有的答案不会改变这种... – Kristopher

回答

-1

字符串是不可变的,你必须重新分配它以这样的方式

timeToDisplay = timeToDisplay.format("%d min, %d sec", 
       TimeUnit.MILLISECONDS.toMinutes(millis), 
       TimeUnit.MILLISECONDS.toSeconds(millis) - 
         TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis))); 

这意味着,该格式的方法不能改变timeToDisplay它只返回一个新字符串,它是格式化。

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

然后,使用formattedTimesetText

3

Java中的字符串是不可变的。你要结果分配回一个变量:

timeToDisplay = String.format(...); 

在你的情况,你不需要把millis成字符串在所有;格式化程序只需要你计算的数字。

0

字符串是不可变。尝试:

timeToDisplay = timeToDisplay.format("%d min, %d sec", 
    TimeUnit.MILLISECONDS.toMinutes(millis), 
    TimeUnit.MILLISECONDS.toSeconds(millis) - 
    TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis))); 
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()。