输入(是取的数据库表中的数据):234.23、245.00、23.8、0等等
期望输出:“00:00:00”格式
例如:输入 234.23则先四舍五入为234,然后转化为“00:03:54”
使用第一种方法在本机得出正确结果,在测试机得出“23:03:54”
1.方法1:
开始是根据时间来处理的:
public String func1(Double date){ String result= sdf.format(date*1000-8*3600*1000); return result; }
结果在本机开发环境下(Windows、Eclipse)能得到正确的结果,但是到了测试机(Linux服务器)上面却不能得到正确的结果。应该是与时区有关!开始没发现,以为是传入的参数有问题,后来在本机测试是正确的,在测试机不正确才恍然大悟。取得时区把8替换,应该也能解决,但在网上找了找,没找到取得时区的方法,所以换成下面用字符串拼接的方法来处理。
2.方法2:
public String formatNumberToHourMinuteSecond(Double dateDou){ String ft = "00:00:00";//没匹配上时:1.等于0时; 2.大于等于86400时. BigDecimal d = new BigDecimal(dateDou).setScale(0, BigDecimal.ROUND_HALF_UP);//四舍五入 int date = Integer.valueOf(d.toString()); if(date > 0 && date < 60){ ft = "00:00:" + date; }else if(date >= 60 && date < 3600){ ft = "00:" + (date/60>=10?date/60:"0"+date/60) + ":" + (date%60>=10?date%60:"0"+date%60); }else if(date >= 3600 && date < 86400 ){ ft = (date/3600>=10?date/3600:"0"+date/3600) + ":" + (date%3600/60>=10?date%3600/60:"0"+date%3600/60) + ":" + (date%60>=10?date%60:"0"+date%60); } return ft; }
PS:尽量别在程序中把条件写死。方法二还可以优化,比较懒...