我正在尝试在我的某个应用程序中显示以下消息以显示等待时间
2小时,3分钟和4秒 1小时2秒
正如您所看到的那样,可能存在许多变化,我正在努力完成这项工作。以下代码运行良好是给定的秒数给出非零小时,分钟和秒,但如果我必须处理只有我有小时和秒显示而没有显示分钟的情况,这就完成了。 / p>
还不确定在哪里添加字符串'和'以及逗号。
我相信应该已经有了解决方案,我可能不知道。
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;
}
}
如果你遇到过这样的事,请告诉我。
答案 0 :(得分:0)
这将返回您发布的结果
2小时,3分钟和4秒
1小时2秒
请注意,只有在分钟不为0时才会包含逗号',',因此我们必须将它放在min>的if test中。 0。 “和”仅在秒不为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;
答案 1 :(得分:0)
您可以使用java日期和时间api。简要示例(使用您在问题正文中提供的方法签名):
static DateFormat dateFormat = new SimpleDateFormat("dd/MM/yy"); //specifiy the
//representation pattern. This is for example. You can construct it more accurate:
//display the hours, mins, secs, etc. Also you can specify your own delimiters.
//See more at docs below
static { //upd: set the proper timezone
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
}
private static String getHumanizedTime(int seconds) {
long timeInMillis = seconds * 1000; //Date object is designed for millis
Date date = new Date(timeInMillis);
return dateFormat.format(date);
}
在javadocs上阅读更多内容: http://docs.oracle.com/javase/6/docs/api/java/util/Date.html http://docs.oracle.com/javase/7/docs/api/java/text/DateFormat.html
更新:如果您希望输出类似于“11小时15分34秒”,请尝试:
static DateFormat dateFormat = new SimpleDateFormat("HH 'hours,' mm 'minutes and' ss 'seconds'");
答案 2 :(得分: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;
}