java日期解析不工作一个月

时间:2017-07-21 12:36:54

标签: java datetime

我想找到两个日期之间的区别,我做了以下几点:

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.

我做错了什么?

2 个答案:

答案 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 更改为DSimpleDateFormat 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")
如上所列hereM已经是两位数字格式,而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