如何根据java中的日期获取上一个日期

时间:2016-10-05 17:12:38

标签: java date datetime

我有一个表示日期的整数数组的ListList。例如,我的列表包含2,8,15(总是递增顺序)所以它将代表任何月份的第2,第8和第15日期。这些日期我必须生成一些发票。所以,如果我在任何月份的15日生成发票,那么我需要从某个表格中获取数据,其中日期应该在之前的发票日期(根据arraylist为8)和15日之间。如果我在任何一个月的第二天生成发票,然后我需要在之前的发票日期(根据arraylist将是上个月的15日)和当月的第二个之间获得数据。

所以我的问题是,如果我的代码今天运行,日期是2,那么我将如何获得以前的发票日期作为java日期对象。所以我可以通过今天的日期和上一个发票日期过滤掉并从中获取数据表

4 个答案:

答案 0 :(得分:0)

您需要使用java8 +或jodatime。 Java 8采用了jodatime,这就是为什么有区别的原因。 Jodatime的api正是你想要的。

答案 1 :(得分:0)

您可以使用以下代码:

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date d = sdf.parse("21/12/2012");

您正在解析的字符串,在此示例中为“21/12/2012”,可以更改为您想要的任何内容。
希望这有帮助,如果没有,让我知道你面临的问题。

答案 2 :(得分:0)

您的问题令人困惑,但我可以帮助您入门。为了您自己的利益,为了您自己的利益,我建议您在开始编码之前用简单的语言彻底了解您的问题。

首先使用精确的术语来阐明您的想法。您不是以日期的ArrayList开头,而是具有表示日期的整数的ArrayList。

接下来你需要今天的约会。这需要一个时区。对于任何特定时刻,日期在全球范围内按区域变化。

ZoneId z = ZoneId.of( "America/Montreal" );

LocalDate类表示没有时间且没有时区的仅限日期的值。

LocalDate today = LocalDate.now( z );

您可能会发现YearMonth课程很方便。

YearMonth ym = YearMonth.from( today );

您可以从该年份获得日期。

LocalDate ld = ym.atDay( 15 );

你可以获得一个月的最后一天。

LocalDate endOfMonth = ym.atEndOfMonth();

您可以进行数学运算,在YearMonth中添加或减去月份。

YearMonth previousYm = ym.minusMonths( 1 );

您可以从LocalDate检索某一天。

int dayOfMonth = myLocalDate.getDayOfMonth();

您可以使用加号和减号方法增加LocalDate。

LocalDate nextDate = myLocalDate.plusDays( 1 );

您应该能够将这些部分放在一起以执行您的特定业务逻辑。

提示:远离棘手的旧遗留日期时间课程。仅使用java.time类。

关于java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧日期时间类,例如java.util.Date.Calendar和& java.text.SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。

大部分java.time功能都被反向移植到Java 6& ThreeTen-Backport中的7,并进一步适应Android中的ThreeTenABP(见How to use…)。

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore

答案 3 :(得分:0)

最后我从下面的代码中解决了我的问题。

private Date getPreviousInvoiceDateFromList(List<String> invoiceDatesList, int dayOfMonth,
      int lastDayOfMonth) {
    String dayOfMonthStr = String.valueOf(dayOfMonth);
    if (invoiceDatesList.size() == 1) {
      return new LocalDate().minusMonths(1).toDate();
    }
    int prevInvoiceDateIndex = -1;
    int todaysDateIndex = invoiceDatesList.indexOf(dayOfMonthStr);
    if (todaysDateIndex == 0) {
      prevInvoiceDateIndex = invoiceDatesList.size() - 1;
      String prevInvoiceDate = invoiceDatesList.get(prevInvoiceDateIndex);
      int prevInvoiceDateVal = Integer.parseInt(prevInvoiceDate);
      int noOfDaysDiff = lastDayOfMonth - prevInvoiceDateVal;
      int totalDaysDiff = noOfDaysDiff + dayOfMonth;
      return new LocalDate().minusDays(totalDaysDiff - 1).toDate();
    } else {
      prevInvoiceDateIndex = todaysDateIndex - 1;
      String prevInvoiceDate = invoiceDatesList.get(prevInvoiceDateIndex);
      int prevInvoiceDateVal = Integer.parseInt(prevInvoiceDate);
      int diff = dayOfMonth - prevInvoiceDateVal;
      return new LocalDate().minusDays(diff).toDate();
    }
  }