我试图找出两个日期之间的差异,所以我做了以下工作:
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”,则日期会相应更改,年份相同,但无论我输入月份的值是多少,它始终输出一月。例如在我的代码中应该是四月,但输出显示为一月。
我究竟做错了什么?
参考方案
将D
更改为d
(SimpleDateFormat Doc
):
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
D
用于年份中的一天(1-365)d
用于月份中的某天(1-31)
现在您还可以使用Java8中的LocalDate
来更方便地使用DateTimeFormatter Doc / LocalDate Doc
您显然想检查日期和现在之间的天差是否为>=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
才能使用小时/分钟/秒
LocalDateTime localDateTime = LocalDateTime.parse("2017-04-21T11:51:36Z", DateTimeFormatter.ISO_DATE_TIME);
java:继承 - java有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…
Java:BigInteger,如何通过OutputStream编写它 - java我想将BigInteger写入文件。做这个的最好方式是什么。当然,我想从输入流中读取(使用程序,而不是人工)。我必须使用ObjectOutputStream还是有更好的方法?目的是使用尽可能少的字节。谢谢马丁 参考方案 Java序列化(ObjectOutputStream / ObjectInputStream)是将对象序列化为八位字节序列的一种通用方法。但…
Java-如何将此字符串转换为日期? - java我从服务器收到此消息,我不明白T和Z的含义,2012-08-24T09:59:59Z将此字符串转换为Date对象的正确SimpleDateFormat模式是什么? java大神给出的解决方案 这是ISO 8601标准。您可以使用SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM…
Java:从类中查找项目名称 - java仅通过类的实例,如何使用Java反射或类似方法查找项目名称?如果不是,项目名称(我真正想要的是)可以找到程序包名称吗? 参考方案 项目只是IDE使用的简单组织工具,因此项目名称不是类或JVM中包含的信息。要获取软件包,请使用Class#getPackage()。然后,可以调用Package#getName()将包作为您在代码的包声明中看到的String来获取…
Java解析部分日期 - java使用SimpleDateFormat.parse(String)要求格式中指定的所有字段都出现在输入字符串中。我想要的是一种针对相同格式验证部分输入字符串的方法。例如,Format="yyyy/MM/dd HH:mm:ss"和Input="2012/01/01"应该匹配,并且一天中的时间应设置为零。有什么办法吗?当前,…