关于日期时间:Java:使用TimeUnit将秒转换为日,时,分和秒

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

    }

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

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


应该像

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

编辑
说明:

  • 日计算是正确的,不需要解释。
  • TimeUnit.SECONDS.toHours(seconds)将使您直接从秒转换为小时,而无需考虑已经计算的天数。减去您已经拥有的天数,即天数* 24。您现在剩下了几个小时。
  • 分钟和秒相同。您需要分别减去已经得到的小时和分钟。

  • 您可以这样做,仅使用TimeUnit

    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
    String str = secondsToString(TimeUnit.DAYS, 1000, TimeUnit.SECONDS);

    函数返回:" 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).");
    }