【问题标题】:JAVA convert minutes into default time [hh:mm:ss]JAVA 将分钟转换为默认时间 [hh:mm:ss]
【发布时间】:2014-11-21 11:51:36
【问题描述】:

将分钟(双精度)转换为默认时间 hh:mm:ss 的最简单和最快的方法是什么

例如,我在 python 中使用了这段代码,它正在工作

时间 = timedelta(分钟=250.0) 打印时间

结果: 4:10:00

有没有java库或者简单的代码可以做到?

【问题讨论】:

  • “默认时间”是什么意思?这里默认了什么?听起来您的意思是“以 hh:mm:ss 的文本格式”。
  • 如果在你有你的替身之前你还有一个日期SimpleDateFormat sdf = new SimpleDateFormat("HH:mm.ss.S"); String timestamp = sdf.format(myDate.getTime());
  • @Jon Skeet 默认时间是 hh:mm:ss,因为您不只使用几分钟或几小时或几秒。
  • @dasLort 谢谢,MihaiC 已经解决了我的问题。
  • 谁没有?而且它仍然不是一个“默认时间”——它可能是一个默认时间格式,但它本身并不是一个时间。

标签: java time default


【解决方案1】:

编辑:要将秒显示为 SS,您可以创建一个简单的自定义格式化程序变量以传递给 String.format() 方法

编辑:如果初始双精度值的小数点分隔符后的数值大于 59,则添加一分钟并重新计算 seconds 的逻辑。

编辑:在对双精度进行数学运算时注意到精度损失(使用双精度的乐趣!)seconds,因此它不时会是正确的值。更改代码以正确计算和舍入它。还添加了处理因秒级联而导致分钟和小时溢出的情况的逻辑。

试试这个(不需要外部库)

public static void main(String[] args) {
    final double t = 1304.00d;

    if (t > 1440.00d) //possible loss of precision again
        return;

    int hours = (int)t / 60;
    int minutes = (int)t % 60;
    BigDecimal secondsPrecision = new BigDecimal((t - Math.floor(t)) * 100).setScale(2, RoundingMode.HALF_UP);
    int seconds = secondsPrecision.intValue();

    boolean nextDay = false;

    if (seconds > 59) {
        minutes++; //increment minutes by one
        seconds = seconds - 60; //recalculate seconds
    }

    if (minutes > 59) {
        hours++;
        minutes = minutes - 60;
    }

    //next day
    if (hours > 23) {
        hours = hours - 24;
        nextDay = true;
    }

    //if seconds >=10 use the same format as before else pad one zero before the seconds
    final String myFormat = seconds >= 10 ? "%d:%02d:%d" : "%d:%02d:0%d";
    final String time = String.format(myFormat, hours, minutes, seconds);
    System.out.print(time);
    System.out.println(" " + (nextDay ? "The next day" : "Current day"));
}

当然,这可以继续下去,扩展这个算法来推广它。到目前为止,它会一直工作到第二天,但不会更进一步,所以我们可以将初始双精度值限制为该值。

 if (t > 1440.00d)
        return;

【讨论】:

  • 正确!简单又简单,还有一件事,秒显示为S,怎么改成SS(例如:8到08),非常感谢
  • 另外请注意,初始双精度不能有大于 59 的小数值(结果不会增加 1 分钟),因此如果您将其定义为 30.60 或 30.61,它不会不正确。您必须确保 .不大于 59。您可以在计算秒数后使用 if 轻松检查 if(seconds>59) System.out.println("Invalid input time")
  • 我编辑了代码来处理大于 59 秒的值
  • 我修复了它并得到了正确的时间(如果我编辑你的答案,你不介意吗?)有时秒值是 59.134134 如果秒 > 59 秒 = 00 分钟++,我会添加非常感谢
【解决方案2】:

使用 Joda,您可以执行以下操作:

import org.joda.time.Period;
import org.joda.time.format.PeriodFormatter;
import org.joda.time.format.PeriodFormatterBuilder;


    final Period a = Period.seconds(25635);
    final PeriodFormatter hoursMinutes = new PeriodFormatterBuilder().appendHours().appendSuffix(" hour", " hours")
            .appendSeparator(" and ").appendMinutes().appendSuffix(" minute", " minutes").appendSeparator(" and ")
            .appendSeconds().appendSuffix(" second", " seconds").toFormatter();
    System.out.println(hoursMinutes.print(a.normalizedStandard()));

【讨论】:

  • 无法获得 hh:mm:ss 但它给了我(小时:XX,分钟:XX)谢谢
  • @user2564147 现在我也应该打印秒数了。
【解决方案3】:
//Accept minutes from user and return time in HH:MM:SS format

    private String convertTime(long time)
{
        String finalTime = "";
        long hour = (time%(24*60)) / 60;
        long minutes = (time%(24*60)) % 60;
        long seconds = time / (24*3600);

        finalTime = String.format("%02d:%02d:%02d",
                TimeUnit.HOURS.toHours(hour) ,
                TimeUnit.MINUTES.toMinutes(minutes),
                TimeUnit.SECONDS.toSeconds(seconds));
        return finalTime;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-18
    • 1970-01-01
    • 2015-12-29
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多