Java: convert seconds into day, hour, minute and seconds using TimeUnit
我正在使用TimeStamp类将秒转换为Day,Hours,Minutes,Seconds。我使用了以下代码
1 2 3 4 5 6 7 8 9 | public static void calculateTime(long seconds) { int day = (int)TimeUnit.SECONDS.toDays(seconds); long hours = TimeUnit.SECONDS.toHours(seconds) - TimeUnit.SECONDS.toHours(TimeUnit.SECONDS.toDays(seconds)); long minute = TimeUnit.SECONDS.toMinutes(seconds) - TimeUnit.SECONDS.toMinutes(TimeUnit.SECONDS.toHours(seconds)); long second = TimeUnit.SECONDS.toSeconds(seconds) - TimeUnit.SECONDS.toSeconds(TimeUnit.SECONDS.toMinutes(seconds)); System.out.println("Day" + day +" Hour" + hours +" Minute" + minute +" Seconds" + second); } |
但是我没有得到正确的结果。
例如,当我将此方法称为
我的逻辑有什么问题?请帮我。
应该像
1 2 3 4 | int day = (int)TimeUnit.SECONDS.toDays(seconds); long hours = TimeUnit.SECONDS.toHours(seconds) - (day *24); long minute = TimeUnit.SECONDS.toMinutes(seconds) - (TimeUnit.SECONDS.toHours(seconds)* 60); long second = TimeUnit.SECONDS.toSeconds(seconds) - (TimeUnit.SECONDS.toMinutes(seconds) *60); |
编辑
说明:
您可以这样做,仅使用
1 2 3 4 5 6 7 8 9 10 11 12 13 | public static void calculateTime(long seconds) { int day = (int) TimeUnit.SECONDS.toDays(seconds); long hours = TimeUnit.SECONDS.toHours(seconds) - TimeUnit.DAYS.toHours(day); long minute = TimeUnit.SECONDS.toMinutes(seconds) - TimeUnit.DAYS.toMinutes(day) - TimeUnit.HOURS.toMinutes(hours); long second = TimeUnit.SECONDS.toSeconds(seconds) - TimeUnit.DAYS.toSeconds(day) - TimeUnit.HOURS.toSeconds(hours) - TimeUnit.MINUTES.toSeconds(minute); System.out.println("Day" + day +" Hour" + hours +" Minute" + minute +" Seconds" + second); } |
或更短但也许不那么直观
1 2 3 4 5 6 7 8 9 10 | public static void calculateTime(long seconds) { int day = (int) TimeUnit.SECONDS.toDays(seconds); long hours = TimeUnit.SECONDS.toHours(seconds) - TimeUnit.DAYS.toHours(day); long minute = TimeUnit.SECONDS.toMinutes(seconds) - TimeUnit.HOURS.toMinutes(TimeUnit.SECONDS.toHours(seconds)); long second = TimeUnit.SECONDS.toSeconds(seconds) - TimeUnit.MINUTES.toSeconds(TimeUnit.SECONDS.toMinutes(seconds)); System.out.println("Day" + day +" Hour" + hours +" Minute" + minute +" Seconds" + second); } |
简单方法:
1 2 3 4 5 6 7 8 | public static void calculateTime(long seconds) { long sec = seconds % 60; long minutes = seconds % 3600 / 60; long hours = seconds % 86400 / 3600; long days = seconds / 86400; System.out.println("Day" + days +" Hour" + hours +" Minute" + minutes +" Seconds" + sec); } |
这是我创建的代码:(在3600秒内,它显示"天数:0小时:1分钟:0秒:0 ")
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | public class TimeConvert { public static void main(String[] args) { int fsec,d,h,m,s,temp=0,i; fsec=3600; //For Days if(fsec>=86400) { temp=fsec/86400; d=temp; for(i=1;i<=temp;i++) { fsec-=86400; } } else { d=0; } //For Hours if(fsec>=3600) { temp=fsec/3600; h=temp; for(i=1;i<=temp;i++) { fsec-=3600; } } else { h=0; } //For Minutes if(fsec>=60) { temp=fsec/60; m=temp; for(i=1;i<=temp;i++) { fsec-=60; } } else { m=0; } //For Seconds if(fsec>=1) { s=fsec; } else { s=0; } System.out.println("Days:"+d+" Hours:"+h+" Minutes:"+m+" Seconds:"+s); } } |
希望它能回答您的问题。
后期但有用的
get time in the format 00:00:00
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | /** * The time in format. * * in The Format of 00:00:00 */ public String getTimeInFormat(long _SECONDS) { if(TimeUnit.SECONDS.toHours(_SECONDS)>0) { return String.format("%02d:%02d:%02d", TimeUnit.SECONDS.toHours(_SECONDS), TimeUnit.SECONDS.toMinutes(_SECONDS) - TimeUnit.HOURS.toMinutes(TimeUnit.SECONDS.toHours(_SECONDS)), TimeUnit.SECONDS.toSeconds(_SECONDS) - TimeUnit.MINUTES.toSeconds(TimeUnit.SECONDS.toMinutes(_SECONDS))); } else { return String.format("%02d:%02d", TimeUnit.SECONDS.toMinutes(_SECONDS) - TimeUnit.HOURS.toMinutes(TimeUnit.SECONDS.toHours(_SECONDS)), TimeUnit.SECONDS.toSeconds(_SECONDS) - TimeUnit.MINUTES.toSeconds(TimeUnit.SECONDS.toMinutes(_SECONDS))); } } |
这是我的代码:
1 2 3 4 5 6 7 8 9 10 11 | public static String secondsToString(TimeUnit greatestUnit, long sourceDuration, TimeUnit sourceUnit) { int ordinal = greatestUnit.ordinal(); if(ordinal<=sourceUnit.ordinal()) return String.format("%02d", sourceDuration); final long greatestDuration = greatestUnit.convert(sourceDuration, sourceUnit); final long rest = sourceDuration - sourceUnit.convert(greatestDuration, greatestUnit); return String.format("%02d:", greatestDuration) + secondsToString(TimeUnit.values()[--ordinal], rest, sourceUnit); } |
或循环播放
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | public static String secondsToStringByLoop(TimeUnit greatestUnit, long sourceDuration, TimeUnit sourceUnit) { final StringBuffer sb = new StringBuffer(); int ordinal = greatestUnit.ordinal(); while(true){ if(ordinal<=sourceUnit.ordinal()) { sb.append(String.format("%02d", sourceDuration)); break; } final long greatestDuration = greatestUnit.convert(sourceDuration, sourceUnit); // if(greatestDuration>0 || sb.length()>0) sb.append(String.format("%02d:", greatestDuration)); sourceDuration -= sourceUnit.convert(greatestDuration, greatestUnit); greatestUnit = TimeUnit.values()[--ordinal]; }; return sb.toString(); } |
用法示例:
1 |
函数返回:" 00:00:16:40 "(天:小时:分钟:秒)
1 | str = UnitsConverter.secondsToString(TimeUnit.DAYS, 1000, TimeUnit.MINUTES); |
返回:" 00:16:40 "(天:小时:分钟)
1 | str = UnitsConverter.secondsToString(TimeUnit.MINUTES, 1000, TimeUnit.SECONDS); |
返回:" 16:40 "(分钟:秒)
试试这个
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | public static void calculateTime(long seconds) { int day = (int)TimeUnit.SECONDS.toDays(seconds); long hours = TimeUnit.SECONDS.toHours(seconds) ; long tempSec = seconds - (TimeUnit.HOURS.toSeconds(hours) ); System.out.println("after hours calculation"+ tempSec); long minute = TimeUnit.SECONDS.toMinutes(tempSec); if(tempSec > TimeUnit.MINUTES.toSeconds(minute)){ tempSec = tempSec - (TimeUnit.MINUTES.toSeconds(minute) ); }else{ tempSec = TimeUnit.MINUTES.toSeconds(minute) - tempSec; } System.out.println("after min calculation"+ tempSec); long second = TimeUnit.SECONDS.toSeconds(tempSec) ; System.out.println("Day" + day +" Hour" + hours +" Minute" + minute +" Seconds" + second); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 | public static void timeCalculator(){ Scanner input = new Scanner(System.in); System.out.print("Enter length of time in seconds:"); int n = input.nextInt(); int nDay = n/86400; int nHours = (n%86400)/3600; int nMin = ((n%86400)%3600) /60; int nSec =(((n%86400)%3600)%60); System.out.println(); System.out.print("That is"+ nDay+" day(s),"+nHours+" hour(s),"+nMin+" minute(s), and"+nSec+" second(s)."); } |