如何在不使用Java日历且没有日期时间戳的情况下获得昨天的约会?

时间:2014-03-17 15:12:29

标签: 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);
       } 
}

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

6 个答案:

答案 0 :(得分:20)

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

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

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

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

答案 1 :(得分:13)

我发现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或更低版​​本中也能很好地工作。

答案 2 :(得分:12)

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

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

答案 3 :(得分:2)

您可以为“昨天”创建一个Date()对象:

private static final String CURRENT_DATE_FORMAT = "yyyy-MM-dd";

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

public final static String formatToday() {
    return format(new Date());
}

public final static String formatYesterday() {
    return format(new Date(new Date().getTime() - 24*3600*1000));
}

答案 4 :(得分:0)

试试这个:

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();
           date .setTime(date.getTime()-24*60*60*1000);  // Subtract 24*60*60*1000 milliseconds
           return dateFormat.format(date);
       } 
}

答案 5 :(得分:0)

请尝试这样做以获取昨天的日期:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    long yourDateMillis = System.currentTimeMillis()- (24 * 60 * 60 * 1000);
                 Time yourDate = new Time();
         yourDate.set(yourDateMillis);

    String formattedDate = yourDate.format("%d-%m-%Y");
    txtViewYesterday.setText(formattedDate);}