我是Java的新手。我给了3次,在&#34; HH:mm:ss&#34;格式。我应该接受输入(以整数(并且必须在几分钟内))将其添加到第3次。如果时间的总和小于第1次和第2次(第1次<=第2次),则必须打印1.如果仅小于第2次,则应打印2.如果两者都不小,则打印假的。
但是,映射日期的双变量I&m的值正在返回 有时负值(请检查输出)。
有人可以帮我理解为什么吗?感谢。
import java.util.*;
import java.text.*;
public class TimeTrial2 {
public static void main(String q[]) throws ParseException
{
Scanner x=new Scanner(System.in);
SimpleDateFormat y=new SimpleDateFormat("HH");
SimpleDateFormat k=new SimpleDateFormat("HH:mm:ss");
String b=x.nextLine();
Date c=k.parse(b);//1st Time
String d=x.nextLine();
Date e=k.parse(d);//2nd Time
String f=x.nextLine();
Date g=k.parse(f);//Time to be added to the input
int a=x.nextInt();//Input time i
a=a/60;
Date z=y.parse(Integer.toString(a));
double p=(z.getTime()+g.getTime());
double r=c.getTime();
double s=e.getTime();
System.out.println(p+"\n"+r+"\n"+s); `//to check the values of p,r and s`
if(r>=p)
{
System.out.println("1");
}
else if(s>=p)
{
System.out.println("2");
}
else
{
System.out.println("FALSE!");
}
}
}
输入:
4时30分○○秒
6时00分○○秒
四点00分00秒
60
这是我的输出:
-2.16E7
-3600000.0
1800000.0
1
编辑:添加330分钟(格林威治标准时间+5:30)可以解决问题。 但是,我建议使用Ole V.V的答案,因为它更容易。我不知道存在这样的日期类和方法。谢谢大家的帮助。
答案 0 :(得分:1)
考虑如何将时间添加到日期。我尝试使用以下代码将日期添加到日期并且工作正常。
Calendar calendar = GregorianCalendar.getInstance();
calendar.setTime(g);
calendar.add(GregorianCalendar.MINUTE, a);
输入:
g = 5:00:00
a = 40
输出:
Thu Jan 01 05:00:00 IST 1970
Thu Jan 01 05:40:00 IST 1970
答案 1 :(得分:0)
尝试使用Date类的equals() , before() , after()
方法。
参考java Api docs
答案 2 :(得分:0)
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Scanner;
public class TimeTrial3 {
public static void main(String... commandLineArguments) {
Scanner consoleInput = new Scanner(System.in);
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("H:mm:ss");
String time1String = consoleInput.nextLine();
LocalTime time1 = LocalTime.parse(time1String, timeFormatter);
String time2String = consoleInput.nextLine();
LocalTime time2 = LocalTime.parse(time2String, timeFormatter);
if (time2.isBefore(time1)) {
System.err.println("First time must be before or equal to second time, they were"
+ time1 + " and " + time2);
System.exit(1);
}
String timeToAddString = consoleInput.nextLine();
LocalTime timetoAdd = LocalTime.parse(timeToAddString, timeFormatter);
int minutesToAdd = consoleInput.nextInt();
LocalTime timeToCompare = timetoAdd.plusMinutes(minutesToAdd);
if (timeToCompare.isBefore(time1))
{
System.out.println("1");
}
else if (timeToCompare.isBefore(time2))
{
System.out.println("2");
}
else
{
System.out.println("False");
}
}
}
Date
课程不太适合代表一天中的某个时段。Date
和SimpleDateFormat
类已经过时了,后者尤其出了名的麻烦。我建议你根本不要使用它们。相反,我正在使用并热烈推荐java.time,即现代Java日期和时间API。与它合作是非常好的。double
或long
。4:30:00
输入在1970年1月1日(纪元日)的时间被解析为偏差-5:50,相当于纪元前1小时,所以它出现为-3600000.0因为-3600秒等于-1小时。只要您的所有时间都处于相同的偏移量,这本身就不是问题。然后你仍然可以使用before
或after
来比较它们,就像哈尔哈·库马尔雷迪在another answer中所说的那样。Date
对象添加毫秒时,会出现问题。第三次,4:00:00,在纪元前30分钟解析为1小时,在纪元前4小时30分钟解析60分钟。添加两者时,您希望时间为5:00:00(在您的时区)。相反,你会在纪元前6小时打印,打印为-2.16E7
(在我的电脑上,我得到的结果不同,因为我在不同的时区)。 Oracle tutorial: Date Time解释如何使用java.time
。