Java在具体日期之前获得一天

时间:2014-10-28 02:26:37

标签: java date

我有一个String过期日期。但我需要在过期日期前一天执行一些SQL语句。我得到了我的过期日期并且通过:

SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
String expiredDate = null;
String currentDate = dateFormat.format(new Date());
Calendar cal = Calendar.getInstance();

try {
            cal.setTime(dateFormat.parse(loanDate));
            cal.add(Calendar.WEEK_OF_YEAR, 2);
            expiredDate = dateFormat.format(cal.getTimeInMillis());
            cal.add(Calendar.WEEK_OF_YEAR, -2);
        } catch (ParseException e) {
            e.printStackTrace();
        }

然后,我得到一个if语句来执行SQL语句:

if(expiredDate.equals(currentDate)){
                        promptExtensionDialog();
                    }

我想要实现的是if语句,而不是expiredDate本身,我需要在过期日期前一天获得并与当前日期进行比较。我想知道如何实现这个目标?

提前致谢。

修改

try {
                        cal.setTime(dateFormat.parse(expiredDate));
                        cal.add(Calendar.DATE, -1);
                        expiredDate = dateFormat.format(cal.getTimeInMillis());
                    } catch (ParseException e) {
                        e.printStackTrace();
                    }
                    Toast.makeText(LoanBook.this,
                            expiredDate, Toast.LENGTH_LONG)
                            .show();

这会返回下一个日期而不是上一个日期。你有什么想法吗?

3 个答案:

答案 0 :(得分:10)

使用Java(8之前版本)内置的Date and Time API会让你活着。使用JodaTime进行复杂的DateTime操作。

前一天就像这一样简单。

    DateTime dateTime = new DateTime();
    System.out.println(dateTime);
    System.out.println(dateTime.minusDays(1));

如果您不想要任何外部库:

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    String strDate = "2014-10-28";
    Date date = sdf.parse(strDate);
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    calendar.add(Calendar.DATE, -1);
    Date yesterday = calendar.getTime();

    System.out.println(yesterday);
    System.out.println(date);

答案 1 :(得分:1)

你试过JodaTime吗?这是一个很棒的库,可以轻松地进行日期操作。实际上,很多Java 8日期处理都是从JodaTime派生的。

根据您的需要,您可以执行以下操作:

DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy");
DateTime dt = formatter.parseDateTime(expiredDate);
DateTime dayBefore = dt.minusDays(1);

答案 2 :(得分:0)

其他两个答案基本上是正确的。但他们忽略了时区和一天开始的关键问题。如果你想要所有的昨天,做一些类似的事情。

DateTimeZone zone = DateTimeZone.forID( "America/Montreal" );
DateTime now = DateTime.now( zone );
DateTime yesterdayStart = now.minusDays( 1 ).withTimeAtStartOfDay();

转换为java.sql.Timestamp

java.sql.Timestamp ts  = new java.sql.Timestamp( yesterdayStart.getMillis() );