我想在Java中减去两个日期(一个常量和一个当前),但我遇到了奇怪的问题。这是代码:
DateFormat df = new SimpleDateFormat("HH:MM");
Date FirstLessonInterval=df.parse("08:45");
Date currentTime = new Date();
long diff = FirstLessonInterval.getTime()-currentTime.getTime();
String s = String.valueOf(diff);
LessonOrBreak=(diff);
我有减去分钟。当我想在FirstLessonInterval.toString()中看到FirstLessonInterval时,它显示了1970年。我该怎么办?
答案 0 :(得分:3)
你忘记给出约会,你刚刚定义了一个时间:
DateFormat df = new SimpleDateFormat("HH:MM");
Date FirstLessonInterval=df.parse("08:45");
这是在unix time第0天,也就是1.1.1970
尝试类似
的内容DateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:MM");
Date FirstLessonInterval=df.parse("2014/05/10 08:45");
答案 1 :(得分:1)
你得到1970年的原因....是因为我怀疑你的差异很小。然后,如果你把它看作一个日期,那么它将是一个小数字+ 1970年1月1日仍然是1970年。但正如我所说,我怀疑我们在你的问题中遗漏了一些代码。
在JodaTime中你可以像下面那样做一些事情,但我不确定你到底是什么
Interval i= new Interval(new DateTime(FirstLessonInterval), new DateTime());
System.out.println("Interval is: " + i.toDurationMillis());
答案 2 :(得分:1)
mm
来表示分钟保持接近原始代码;
DateFormat df = new SimpleDateFormat("HH:mm");
Date firstLessonInterval = df.parse("08:45");
Date currentTime = new Date();
// Format the current date comparable to UNIX epoch (only hold time params)
String dateStr = df.format(currentTime.getTime());
// Parse the modified date string to a date object
Date comDate = df.parse(dateStr);
// Take the difference in millis
long diff = firstLessonInterval.getTime() - comDate.getTime();
String s = String.valueOf(diff);
// Print the number of minutes passed since
System.out.println("Minutes {elapsed since/time to} 08:45 - " + Math.abs(diff) / 1000 / 60);
答案 3 :(得分:1)
正如其他正确答案所说,您使用的是java.util.Date类,它是一个同时包含日期部分和时间部分的日期时间类。
如果你真的只关心时间,没有日期和没有时区,那么使用Joda-Time库和Java 8中的新java.tome包中找到的LocalTime类。顺便说一下java.util.Date和.Calendar类是众所周知的麻烦,应该避免。
以下是一些包含日期时间和时区的代码。
使用Joda-Time 2.3库...
DateTimeZone timeZone = DateTimeZone.forID( "Europe/Warsaw" );
DateTime dateTime = new DateTime( 2014, 1, 2, 8, 45, 0, timeZone );
DateTime now = new DateTime( 2014, 1, 2, 8, 30, 0, timeZone ); // Or DateTime.now( timeZone )
Duration duration = new Duration( dateTime, now ); // or use Period or Interval.
Joda-Time提供了一段时间(周期,间隔或持续时间)的智能课程和工作方法。例如,查看Minutes类。但如果您只需要毫秒,那么就去吧。
long millis = duration.getMillis();
答案 4 :(得分:0)
问题是您没有向SimpleDateFormat提供足够的信息。它正确设置了小时和分钟,但没有别的。
DateFormat df = new SimpleDateFormat("HH:mm");
System.out.println(df.parse("08:45")); // Thu Jan 01 08:45:00 GMT 1970
System.out.println(new Date()); // Sun May 11 07:52:50 GMT 2014
如果您希望您的日期与当前日期相关,请尝试:
Date curr = new Date();
Date date = new Date(curr.getYear(),
curr.getMonth(),
curr.getDate(),
8, 45, 0);
System.out.println(date); // Sun May 11 08:45:00 GMT 2014
System.out.println(curr); // Sun May 11 07:52:50 GMT 2014
long diff = date.getTime() - curr.getTime();
System.out.println("Minutes: " + diff/6000); // Minutes: 53
答案 5 :(得分:0)
我不知道这种方式是否有效,但无论如何它都是一个想法:
Date curr = new Date();
Date date = new Date(114, /*114 is 2014 , don't know why*/
6,
16,
8, 45, 0);
System.out.println(curr);
System.out.println(date);
Date x = new Date(curr.getYear() - date.getYear() ,
curr.getMonth() - date.getMonth(),
curr.getDate() - date.getDate(),
curr.getHours() - date.getHours(),
curr.getMinutes() - date.getMinutes(),
curr.getSeconds() - date.getSeconds() );
答案 6 :(得分:0)
String startDateString = "2017-03-08";
String finishDateString = "2017-03-10";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.ENGLISH);
LocalDate startDate = LocalDate.parse(startDateString, formatter);
LocalDate finishDate = LocalDate.parse(finishDateString, formatter);
Integer day = finishDate.compareTo(startDate);
整数天将为3.这意味着两个日期之间的差异等于3天