如何在不使用Java中的日历的情况下获得昨天的日期,并且没有时间戳而只是日期?

2022-09-02 00:14:23

我已经编写了一个方法,以格式获取当前日期,并希望能够创建另一种方法来获取昨天的日期,即当前日期的前一天。所有这些都需要的是日期而不是时间戳。我也没有试图使用。我以这种方式设置了当前日期:yyyy-MM-ddCalendar

public class DateWithNoTimestamp
{
       private static final String CURRENT_DATE_FORMAT = "yyyy-MM-dd";

       public final static String getCurrentDate()
       {
               DateFormat dateFormat = new SimpleDateFormat(CURRENT_DATE_FORMAT);
               Date date = new Date();
               return dateFormat.format(date);
       } 
}

这可以获取当前日期,现在是我遇到麻烦的单独方法。我如何以与减去一天时类似的方式进行设置?getYesertdayDate()getCurrentDate()


答案 1

您可以简单地从日期中减去毫秒,并设置该值的格式:1000 * 60 * 60 * 24

Date yesterday = new Date(System.currentTimeMillis() - 1000L * 60L * 60L * 24L));

这是快速而肮脏的方式,并且,正如评论中指出的那样,当夏令时转换发生时(每年两天),它可能会中断。推荐的替代方法是 Calendar APIJoda API 或新的 JDK 8 time API:

LocalDate today = LocalDate.now();
LocalDate yesterday = today.minusDays(1);

答案 2

我发现它更直观,更易于使用。org.apache.commons.lang3.time.DateUtils

对于您的问题

Date date = DateUtils.addDays(new Date(), -1);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.format(date);

将做这个把戏。它在JDK7或更低版本中也运行良好。