【问题标题】:java date parsing not working working for month [duplicate]java日期解析在一个月内不起作用[重复]
【发布时间】:2023-04-07 05:29:01
【问题描述】:

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

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”,则日期会相应更改,年份相同,但无论我为月份设置什么值,它总是输出一月。例如,在我的代码中应该是四月,但输出显示的是一月。

我做错了什么?

【问题讨论】:

标签: java datetime


【解决方案1】:

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);

【讨论】:

  • @azro 谢谢你的回答和解释。关于您使用 LocalDate 的建议,看起来不错,但我需要解析的字符串格式为“2017-04-21T11:51:36Z”,这应该是什么 DateTimeFormatter.ofPattern?
  • 你看过文档了吗?不确定,我已经编辑了答案,并考虑在你没事的时候接受答案;)
【解决方案2】:

问题在于您的日期格式:new SimpleDateFormat("yyyy-MM-DD")
here 所列,M 已经是两位数格式 - 而D 代表“年中的日”,而不是“月中的日”,即 d。 您的格式应如下所示:

SimpleDateFormat("y-M-d")

...这给了我:

Fri Jul 21 14:44:03 CEST 2017
Thu Apr 27 00:00:00 CEST 2017
7397043764
haha

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    • 2016-11-28
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多