【问题标题】:Subtracting a date from the current day in Java [closed]从Java中的当天减去日期[关闭]
【发布时间】:2020-08-27 18:07:48
【问题描述】:

我有一个特定的日期格式。我可以减去 2 个日期,但我无法从未来的日期中减去今天的日期。

我找到了获取今天日期的方法

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd/MM/yyyy");
    LocalDateTime now = LocalDateTime.now();
    System.out.println(dtf.format(now));

这是我减去 2 个日期(字符串)的方法

public boolean DateDiff(String datep,String dater) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
        LocalDate date1 = LocalDate.parse(datep, formatter);
        LocalDate date2 = LocalDate.parse(dater, formatter);
        
        long elapsedDays = ChronoUnit.DAYS.between(date1, date2);

我无法将当前日期转换为字符串,因此我可以减去 2 个相同类型的变量。LocalDateTime now 是什么类型

【问题讨论】:

  • “我无法将当前日期转换为字符串”:但您已经这样做了 - dtf.format(now)。当然,您无需将未来日期与LocalDate.now() 进行比较。
  • 看看这个:stackoverflow.com/questions/22326339/…。这应该可以消除您的所有疑虑。
  • 这能回答你的问题吗? How create Date Object with values in java
  • 我尝试了弗兰克的方式。但它给了我线程“JavaFX 应用程序线程”java.lang.NullPointerException 中的异常:文本错误。很奇怪。我已经成功地通过文本字段中的输入减去了两个日期(字符串),现在我尝试从未来的它给了我这个错误
  • 我同意这很奇怪。 @FrankMi 的答案中的代码中没有任何内容可以为您提供 NullPointerException(我运行了四个 sn-ps 中的每一个,没有出现任何异常)。

标签: java date


【解决方案1】:

使用 LocalDate 的 minusDays() 函数来减去日期就像这个一样简单:

LocalDate now = LocalDate.now();
LocalDate thirtyDaysAgo = now.minusDays(30);

如果你有标准的日期字符串,见“2020-08-27”,可以这样解析:

String date = "2020-08-27";
LocalDate thirtyDaysAgo = LocalDate.parse(date).minusDays(30);
System.out.println(thirtyDaysAgo); //prints 2020-07-28

如果你有特殊的日期格式,见“2020/08/27”,你这样解析:

String date = "2020/08/27";
LocalDate thirtyDaysAgo = LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy/MM/dd")).minusDays(30);
System.out.println(thirtyDaysAgo); //prints 2020-07-28

要将 LocalDate 转换为具有格式的字符串,您可以这样做:

LocalDate date = LocalDate.now();
String formatedDate = date.format(DateTimeFormatter.ofPattern("yyyy/MM/dd"));
System.out.println(formatedDate); //prints 2020/08/27

【讨论】:

    【解决方案2】:

    使用LocalDate 而不是LocalDateTime 来获取今天的日期

    LocalDate currentDate = LocalDate.now();
    

    出于某种原因,如果您仍想使用LocalDateTime 来获取今天的日期,您可以这样做

    LocalDateTime currentDateTime = LocalDateTime.now();
    LocalDate currentDate = currentDateTime.toLocalDate();
    

    如果您想将currentDate 转换为String 所需的格式如下:

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");   
    String currentDateString = currentDate.format(formatter);
    

    如果您拥有的两个日期都是LocalDate 类型,那么您可以找到它们之间的天数,如下所示:

    public long DateDiff(LocalDate date1,LocalDate date2) {
    
        return Duration.between(date1, date2).toDays();
    }
    

    如果您拥有的两个日期都是String 类型,那么您可以找到它们之间的天数,如下所示:

    public long DateDiff(String dateString1,String dateString2) {
    
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
        LocalDate date1 = LocalDate.parse(dateString1, formatter);
        LocalDate date2 = LocalDate.parse(dateString2, formatter);
    
       return Duration.between(date1, date2).toDays();
    }
    

    希望能解决你的问题

    【讨论】:

      【解决方案3】:

      您可以使用 joda-time 库,在 java 中处理日期时,这是一种幸福。

      减去 2 个日期

      DateTime yesterday = new DateTime().withTimeAtStartOfDay().minusMinutes(10);
      
      DateTime twoDaysFromToday = new DateTime().withTimeAtStartOfDay().plusDays(2);
      
      Days.daysBetween(yesterday.toLocalDate(), twoDaysFromToday.toLocalDate()).getDays();
      

      【讨论】:

      • 当提问者已经在使用现代 Java 日期和时间 API 的 java.time 时,暗示 Joda-Time(当时一个很好的库)似乎落后了一步?
      【解决方案4】:

      使用LocalDate(不是LocalDateTime)。

          DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
          
          LocalDate today = LocalDate.now(ZoneId.of("Asia/Calcutta"));
          LocalDate futureDate = LocalDate.parse("26/09/2020", formatter);
          long elapsedDays = ChronoUnit.DAYS.between(today, futureDate);
          
          System.out.println("Days until future date: " + elapsedDays);
      

      刚刚运行时的输出:

      距离未来日期的天数:29

      【讨论】:

        猜你喜欢
        • 2012-10-07
        • 2012-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-28
        相关资源
        最近更新 更多