我想找到两个日期之间的区别,我做了以下几点:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class test {
public static void main(String[] args) {
Date date = new Date();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-DD");
String accessioned = "2017-04-27";
System.out.println(date);
try {
date = format.parse(accessioned);
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println(date);
Date now = new Date();
long diff = now.getTime() - date.getTime();
System.out.println(diff);
if ((diff / (1000 * 60 * 60 * 24)) >= 30) {
System.out.println("haha");
}
}
}
这是我得到的输出:
Fri Jul 21 14:23:59 CEST 2017
Fri Jan 27 00:00:00 CET 2017
15168239705
haha
问题是,如果我将加入的字符串更改为例如“2017-04-28”,则日期会相应更改,同样的事情是年份,但无论我为月份放置什么值,它总是输出1月。例如,在我的代码中,它应该是4月,但输出是Jan.
我做错了什么?
答案 0 :(得分:5)
将netstat -a | grep mysql
tcp 0 0 localhost:mysql 0.0.0.0:* LISTEN
unix 2 [ ACC ] STREAM LISTENING 17787 /var/run/mysqld /mysqld.sock
mysql --version
mysql Ver 15.1 Distrib 10.1.23-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
更改为D
(SimpleDateFormat Doc
):
d
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
是一年中的一天(1-365)D
表示每月(1-31)此外,您现在可以使用Java8中的d
更方便地使用DateTimeFormatter Doc / LocalDate Doc
您显然希望检查日期与现在之间的天数差异是LocalDate
,因此我将提出另一个>=30
解决方案:
LocalDate
编辑:您需要使用LocalDate localDate = LocalDate.parse("2017-04-27", DateTimeFormatter.ofPattern("yyyy-MM-dd"));
long daysDiff = localDate.until(LocalDate.now(), ChronoUnit.DAYS);
System.out.println(daysDiff);
if (daysDiff >= 30){
System.out.println("haha");
}
代替LocalDateTime
才能使用小时/分钟/秒
LocalDate
答案 1 :(得分:3)
问题是您的日期格式:new SimpleDateFormat("yyyy-MM-DD")
如上所列here,M
已经是两位数字格式,而D
代表"一年中的日期",而不是"日期和#34 ;,d
。
您的格式应如下所示:
SimpleDateFormat("y-M-d")
......这给了我:
Fri Jul 21 14:44:03 CEST 2017
Thu Apr 27 00:00:00 CEST 2017
7397043764
haha