把数值转化为“00:00:00”格式

时间:2021-06-13 19:35:37

输入(是取的数据库表中的数据):234.23、245.00、23.8、0等等

期望输出:“00:00:00”格式 

  例如:输入 234.23则先四舍五入为234,然后转化为“00:03:54”

使用第一种方法在本机得出正确结果,在测试机得出“23:03:54”

把数值转化为“00:00:00”格式


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:尽量别在程序中把条件写死。方法二还可以优化,比较懒...