我有来自学校的这段代码,我似乎无法完全理解它在做什么。我知道它显示了一个单圈时间,就像来自运动的那样,以分钟,秒和毫秒换算,但我不明白2弦变量是什么以及他们做了什么。
以下是代码:
public String getTimeFormat(long ms){
String s1 = ""+ms;
Date date = null;
try {
date = new SimpleDateFormat("SSS").parse(s1);
} catch (ParseException e){
e.printStackTrace();
}
String s2 = new SimpleDateFormat("mm:ss:SS").format(date);
return s2;
}
答案 0 :(得分:5)
首先,在我看来,这是非常糟糕的代码。
它将原始ms
值转换为字符串(因此35968将变为“35968”),然后将其解析为Date
,就好像来自仅的格式>指定一个毫秒数......然后将其解释为“自格式化程序时区的Unix纪元以来的毫秒数”。
然后通过使用另一个Date
格式化将SimpleDateFormat
值转换为分钟/秒/毫秒格式。毫秒只被格式化为2个小数位,尽管在这里使用:
作为分隔符而不是.
很奇怪。 (它使它看起来像小时/分钟/秒值,而不是分钟/秒/毫秒。)
两种格式都使用相同的时区,至少排序可避免出现问题。但是:
NullPointerException
将被以下行抛出,因为date
仍然是空new Date(ms)
然后使用SimpleDateFormat
格式化它并将时区设置为UTC也会更简单。这里不需要任何字符串解析在不知道更多要求的情况下,我无法轻松提供更好的代码,但如果您尝试替换此代码,则应考虑:
ms
为否定,您想做什么?ms
代表一个多小时,您想做什么?:
作为秒和毫秒之间的分隔符吗?然后,您可能希望使用String.format
格式化值。遗憾的是,Java 8中的Joda Time和java.time
都没有很好的方法来执行自定义Duration
格式化,这正是您真正想要的。