如何在不使用Java中的Calendar且没有时间戳的情况下获取昨天的日期?

whe*_*c64 18 java date date-format simpledateformat

我已经写了一个方法来获取当前日期的格式,yyyy-MM-dd并希望能够创建另一种方法来获取昨天的日期,即当前日期的前一天.所有这些需求是日期而不是时间戳.我也不想使用Calendar它.我这样设置了当前日期:

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);
       } 
}
Run Code Online (Sandbox Code Playgroud)

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

Gio*_*tta 23

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

Date yesterday = new Date(System.currentTimeMillis() - 1000L * 60L * 60L * 24L));
Run Code Online (Sandbox Code Playgroud)

这是快速而肮脏的方式,并且正如评论中所指出的,当夏令时转换发生时(每年两天),它可能会破裂.推荐的替代方案是Calendar API,Joda API或新的JDK 8时间API:

LocalDate today = LocalDate.now();
LocalDate yesterday = today.minusDays(1);
Run Code Online (Sandbox Code Playgroud)


dyn*_*yng 14

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

对于你的问题

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

会做的.它在JDK7或更低版​​本中也能很好地工作.


lla*_*all 12

使用Java 8及更高版本,使用java.time.LocalDate类:

LocalDate yesterday = LocalDate.now().minusDays(1L);
Run Code Online (Sandbox Code Playgroud)