java time转 datetime_datetime-Java:使用TimeUni将秒转换为日,时,分和秒

datetime-Java:使用TimeUni将秒转换为日,时,分和秒

我正在使用TimeStamp类将秒转换为Day,Hours,Minutes,Seconds。 我用下面的代码

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

}

但是我没有得到正确的结果。例如,当我将此方法称为calculateTime(3600)时,结果为Day 0 Hour 1 Minute 60 Seconds 3540,而不是Day 0 Hour 1 Minute 0 Seconds 0。

我的逻辑有什么问题? 请帮我。

8个解决方案

93 votes

应该像

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

编辑说明:

日计算正确,不需要解释。

TimeUnit.SECONDS.toHours(seconds)将使您直接从秒转换为小时,而无需考虑已经计算的天数。 减去您已经拥有的天数,即天数* 24。 您现在剩下了几个小时。

分钟和秒相同。 您需要分别减去已经得到的小时和分钟。

Subir Kumar Sao answered 2020-07-29T22:22:16Z

12 votes

您可以这样做,只使用TimeUnit:

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

}

或稍短但可能不那么直观

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

}

Keppil answered 2020-07-29T22:22:40Z

7 votes

简单方法:

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

}

Diemon answered 2020-07-29T22:23:00Z

2 votes

这是我创建的代码:(持续3600秒,它显示“天数:0小时:1分钟:0秒:0”)

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

}

}

希望它能回答您的问题。

codeDEXTER answered 2020-07-29T22:23:24Z

1 votes

晚了但有帮助

以00:00:00的格式获取时间

/**

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

}

}

Ashvin solanki answered 2020-07-29T22:23:48Z

0 votes

试试这个

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

}

Sudhakar answered 2020-07-29T22:24:08Z

0 votes

这是我的代码:

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

}

或循环

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

}

用法示例:

String str = secondsToString(TimeUnit.DAYS, 1000, TimeUnit.SECONDS);

函数返回:“ 00:00:16:40”(天:小时:分钟:秒)

str = UnitsConverter.secondsToString(TimeUnit.DAYS, 1000, TimeUnit.MINUTES);

返回:“ 00:16:40”(天:小时:分钟)

str = UnitsConverter.secondsToString(TimeUnit.MINUTES, 1000, TimeUnit.SECONDS);

返回:“ 16:40”(分钟:秒)

Oleksandr Potomkin answered 2020-07-29T22:24:49Z

-1 votes

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

}

Onome answered 2020-07-29T22:25:05Z


版权声明:本文为weixin_29359765原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。