Java 显示人性化时间输出

Java 显示人性化时间输出,java,time,humanize,Java,Time,Humanize,我试图在我的一个应用程序中显示以下消息,以显示等待时间 2小时3分钟4秒 1小时2秒 正如你所看到的,可能会有很多变化,我正在努力做到这一点。下面的代码工作得很好,给定的秒数给出了非零的hr、min和sec,但是如果我必须处理只有小时和秒可显示,没有分钟可显示的情况,这就完成了 也不确定在哪里添加这些字符串“and”和逗号 我相信应该已经有一个解决办法,我可能不知道 public class HumanizedWaitDisplay { public static void main(Stri

我试图在我的一个应用程序中显示以下消息,以显示等待时间

2小时3分钟4秒
1小时2秒

正如你所看到的,可能会有很多变化,我正在努力做到这一点。下面的代码工作得很好,给定的秒数给出了非零的hr、min和sec,但是如果我必须处理只有小时和秒可显示,没有分钟可显示的情况,这就完成了

也不确定在哪里添加这些字符串“and”和逗号

我相信应该已经有一个解决办法,我可能不知道

public class HumanizedWaitDisplay {

public static void main(String[] args) {
    int noOfSecToWait = 60*60*2 + 30;
    System.out.println("Waiting for " + getHumanizedTime(noOfSecToWait));
}

private static String getHumanizedTime(int seconds) {
    String out ="";
    int hr = seconds/(60*60);
    seconds = seconds%(60*60);
    int min = seconds/(60);
    seconds = seconds%(60);

    if(hr>0) {
        out +=  hr + " hour" +(hr == 1 ? " ":"s ");
    }
    if(min > 0){
        out +=  min + " min" +(min == 1 ? " ":"s ");
    }
    if(seconds > 0){
        out +=  seconds + " s";
    }
    return out;
}
}

如果您遇到这种情况,请告诉我。

这将返回您发布的结果

2小时3分钟4秒

1小时2秒

请注意,逗号“,”仅在分钟数不为0时才包含,因此我们必须将其放置在if测试中,以确定分钟数>0。 “and”仅在秒数不为0时显示,因此我们将其置于if测试中,并持续秒数>0

    if(hr > 0) {
        out += hr + " hour" +(hr == 1 ? "":"s");
    }       
    if(min > 0){
        out += ", " + min + " min" +(min == 1 ? "":"s");
    }
    if(seconds > 0){
        out += " and " + seconds + " s";
    }
    return out;

您可以使用java日期和时间api。简要示例(使用您在问题正文中提供的方法签名):

在javadocs上阅读更多内容:

更新:如果您希望输出类似“11小时15分34秒”,请尝试:

static DateFormat dateFormat = new SimpleDateFormat("HH 'hours,' mm 'minutes and' ss 'seconds'");

试试这个,这个代码可以解决你的问题

private static String getHumanizedTime(int seconds) {
String out ="";
int hr = seconds/(60*60);
seconds = seconds%(60*60);
int min = seconds/(60);
seconds = seconds%(60);

boolean htrue = false;
boolean mtrue = false;
if(hr>0) {
    out +=  hr + " hour" +(hr == 1 ? " ":"s ");
    htrue = true;
}
if(min > 0){
    if(htrue && seconds>0)
        out += ",";
    else if(seconds==0)
        out += "and";

    mtrue = true;
    out +=  min + " min" +(min == 1 ? " ":"s ");

}
if(seconds > 0){
    if(htrue || mtrue)
        out += "and ";
    out +=  seconds + " s";
}
return out;
}

您的代码似乎工作正常。有什么问题?关于哪些输入?看看这个@Maroun,我无法计算“and”和逗号的位置。如果只有小时显示,分钟和秒为零。。。有很多案例。希望您能从您提供的链接中获得图片。@R.J完美答案。谢谢试图搜索,但不清楚关键字。@mtk-没问题!在我身上也发生过很多次。如果min和secs为0,这将给出一个尾随“,”。嘿。。现在,如果小时为零,它将给出一个前导“,”。我希望你明白,事情并不是那么简单:)
private static String getHumanizedTime(int seconds) {
String out ="";
int hr = seconds/(60*60);
seconds = seconds%(60*60);
int min = seconds/(60);
seconds = seconds%(60);

boolean htrue = false;
boolean mtrue = false;
if(hr>0) {
    out +=  hr + " hour" +(hr == 1 ? " ":"s ");
    htrue = true;
}
if(min > 0){
    if(htrue && seconds>0)
        out += ",";
    else if(seconds==0)
        out += "and";

    mtrue = true;
    out +=  min + " min" +(min == 1 ? " ":"s ");

}
if(seconds > 0){
    if(htrue || mtrue)
        out += "and ";
    out +=  seconds + " s";
}
return out;
}