我有一个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();
这会返回下一个日期而不是上一个日期。你有什么想法吗?
答案 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 ts = new java.sql.Timestamp( yesterdayStart.getMillis() );