现在我正在使用此代码
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DATE) - 1, 12, 0, 0); //Sets Calendar to "yeserday, 12am"
if(sdf.format(getDateFromLine(line)).equals(sdf.format(cal.getTime()))) //getDateFromLine() returns a Date Object that is always at 12pm
{...CODE
必须有一种更平滑的方法来检查getdateFromLine()返回的日期是否是昨天的日期。只有日期很重要,而不是时间。这就是我使用SimpleDateFormat的原因。 感谢您的帮助!
答案 0 :(得分:75)
Calendar c1 = Calendar.getInstance(); // today
c1.add(Calendar.DAY_OF_YEAR, -1); // yesterday
Calendar c2 = Calendar.getInstance();
c2.setTime(getDateFromLine(line)); // your date
if (c1.get(Calendar.YEAR) == c2.get(Calendar.YEAR)
&& c1.get(Calendar.DAY_OF_YEAR) == c2.get(Calendar.DAY_OF_YEAR)) {
这也适用于1月1日这样的日期。
答案 1 :(得分:15)
使用Java 8中内置的java.time
框架
LocalDate now = LocalDate.now(); //2015-11-24
LocalDate yesterday = LocalDate.now().minusDays(1); //2015-11-23
yesterday.equals(now); //false
yesterday.equals(yesterday); //true
官方Oracle LocalDate
tutorial州
equals方法应该用于比较。
如果您使用LocalDateTime
,ZonedDateTime
或OffsetDateTime
等对象,则可以转换为LocalDate
。
LocalDateTime.now().toLocalDate(); # 2015-11-24
答案 2 :(得分:14)
我同意Ash Kim的观点,如果你想保持自己的理智,Joda-Time图书馆就是你的选择。
import org.joda.time.DateTime;
public static boolean dayIsYesterday(DateTime day) {
DateTime yesterday = new DateTime().withTimeAtStartOfDay().minusDays(1);
DateTime inputDay = day.withTimeAtStartOfDay();
return inputDay.isEqual(yesterday);
}
在此示例中,如果DateTime day
来自昨天,那么dayIsYesterday(day)
将返回true
。
答案 3 :(得分:2)
不要设置日历,请尝试以下方法:
public static void main(String[] args) {
int DAY_IN_MILLIS = 1000 * 60 * 60 * 24;
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yy");
String prevDate = dateFormat.format(date.getTime() - DAY_IN_MILLIS);
String currDate = dateFormat.format(date.getTime());
String nextDate = dateFormat.format(date.getTime() + DAY_IN_MILLIS);
System.out.println("Previous date: " + prevDate);
System.out.println("Current date: " + currDate);
System.out.println("Next date: " + nextDate);
}
这应该允许您沿着日历前进和后退
然后您可以简单地将getDateFromLine(行)与prevDate值或您喜欢的任何值进行比较。
答案 4 :(得分:1)
我建议您考虑使用Joda-Time。它比JDK产品更好。
答案 5 :(得分:0)
粗略地说:
Calendar c1 = Calendar.getInstance();
Date d1 = new Date(/* control time */);
c1.setTime(d1);
//current date
Calendar c2 = Calendar.getInstance();
int day1=c1.get(Calendar.DAY_OF_YEAR);
int day2=c2.get(Calendar.DAY_OF_YEAR);
//day2==day1+1
答案 6 :(得分:0)
当我用这种方法来测试这个方法时,我发现它有点混乱
Calendar now = new GregorianCalendar(2000, 1, 1);
now.add(Calendar.DATE, -1);
SimpleDateFormat format= new SimpleDateFormat("yyyy-MM-dd");
System.out.println(format.format(now.getTime()));
我期望打印 1999-12-31 ,但实际是 2001-1-31 我猜Calendar.add()只处理每月的日子。
但实际错误是我创建Calendar对象的方式。 在日历中,月份以 0 开头,变量现在的值是2001-2-1,我是如此自负,不打印它。当我发现有些错误时。 创建日历的正确方法是:
Calendar now = new GregorianCalendar(2000, Calendar.JANUARY, 1);
日历对于前C#程序员来说太奇怪了:(
答案 7 :(得分:0)
随时重用这些扩展方法。他们对此帖子的答案影响很大。顺便感谢大家!
fun Date.isSameDay(other: Date): Boolean {
val thisCalendar = Calendar.getInstance()
val otherCalendar = Calendar.getInstance()
thisCalendar.time = this
otherCalendar.time = other
return thisCalendar.get(Calendar.YEAR) == otherCalendar.get(Calendar.YEAR)
&& thisCalendar.get(Calendar.DAY_OF_YEAR) == otherCalendar.get(Calendar.DAY_OF_YEAR)
}
fun Date.isYesterday(other: Date): Boolean {
val yesterdayCalendar = Calendar.getInstance()
yesterdayCalendar.time = other
yesterdayCalendar.add(Calendar.DAY_OF_YEAR, -1)
return yesterdayCalendar.time.isSameDay(this)
}