Java日期解析无法正常工作一个月 - java

我试图找出两个日期之间的差异,所以我做了以下工作:

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更改为dSimpleDateFormat 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"应该匹配,并且一天中的时间应设置为零。有什么办法吗?当前,…