我已经编写了一种方法,以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()
类似的方式进行设置?
答案 0 :(得分:20)
您可以简单地从日期中减去1000 * 60 * 60 * 24
毫秒并格式化该值:
Date yesterday = new Date(System.currentTimeMillis() - 1000L * 60L * 60L * 24L));
这是快速而肮脏的方式,并且,正如评论中所指出的,当夏令时转换发生时(每年两天),它可能会破裂。推荐的替代方案是Calendar API,Joda 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);}