Java:使用时间单位将秒转换为日、时、分和秒

Java:使用时间单位将秒转换为日、时、分和秒,java,datetime,time,Java,Datetime,Time,我使用TimeStamp类将秒转换为天、小时、分钟、秒。我使用了以下代码 public static void calculateTime(long seconds) { int day = (int)TimeUnit.SECONDS.toDays(seconds); long hours = TimeUnit.SECONDS.toHours(seconds) - TimeUnit.SECONDS.toHours(TimeUnit.SECONDS.

我使用TimeStamp类将秒转换为天、小时、分钟、秒。我使用了以下代码

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)
时,它将结果显示为
day0hour 1minute60seconds3540
,而不是
day0hour 1minute0seconds0

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

应该是这样的

 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(秒)将为您提供从秒到小时的直接转换,而不考虑您已经计算的天数。减去你已经拥有的天数的小时数,即第24天。你现在还有剩余的时间
  • 分钟和秒都一样。你需要分别减去已经得到的小时和分钟

  • 下面是我创建的代码:(3600秒显示“天:0小时:1分钟:0秒:0”)

    公共类时间转换
    {
    公共静态void main(字符串[]args)
    {
    温度=0,i;
    fsec=3600;
    //好几天
    如果(fsec>=86400)
    {
    温度=fsec/86400;
    d=温度;
    对于(i=1;i=3600)
    {
    温度=fsec/3600;
    h=温度;
    对于(i=1;i=60)
    {
    温度=fsec/60;
    m=温度;
    对于(i=1;i=1)
    {
    s=fsec;
    }
    其他的
    {
    s=0;
    }
    系统输出打印项次(“天:+d+”小时:+h+”分钟:+m+”秒:+s);
    }
    }
    
    希望它能回答您的问题。

    试试这个

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

    您可以这样做,只使用
    时间单位

    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);
    }
    
    简单方法:

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

    晚了,但很有帮助

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

    这是我的代码:

    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);
    }
    
    函数返回:“00:00:16:40”(天:小时:分钟:秒)

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


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

    很好的尝试。但是我使用的是TimeUnit类,没有得到想要的答案。实际上这是一个很好的答案。一个很好的用例是计算当前和某个未来目标日期之间的剩余时间。只需使用上面的代码创建一个新方法。Calculate
    long duration=endDate.getTime()-startDate.getTime();
    long diffinsionds=时间单位。毫秒。到秒(持续时间)
    。然后将
    diffinsectonds
    作为参数传递给此新方法。从整数变量列表中删除
    fsec
    。然后删除行
    fsec=3600;
    。或者将
    fsec
    的所有实例替换为
    diffinsectonds
    或者将输入参数命名为
    long fsec
    。干杯。+1谢谢这是一个很好的答案。很抱歉,我有一个选择正确答案的选项。不客气!在有用的答案中添加+1,然后选择你最喜欢的答案作为正确答案似乎是完美的行为。所以基本上你有可变秒的时间戳?那么月和年呢?不鼓励只使用代码的答案。问题是关于使用时间单位。你根本不用。
    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). ");
    }
    
    /**
         * 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)));
        }
    
    }
    
    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);
    
    str = UnitsConverter.secondsToString(TimeUnit.DAYS, 1000, TimeUnit.MINUTES);
    
    str = UnitsConverter.secondsToString(TimeUnit.MINUTES, 1000, TimeUnit.SECONDS);