Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我怎样才能得到昨天;在Java中不使用日历,也不使用时间戳,只是日期?_Java_Date_Date Format_Simpledateformat - Fatal编程技术网

我怎样才能得到昨天;在Java中不使用日历,也不使用时间戳,只是日期?

我怎样才能得到昨天;在Java中不使用日历,也不使用时间戳,只是日期?,java,date,date-format,simpledateformat,Java,Date,Date Format,Simpledateformat,我编写了一个方法,以yyyy-MM-dd的格式获取当前日期,并希望能够创建另一个方法来获取昨天的日期,即当前日期的前一天。所有这些需要的是日期,而不是时间戳。我也不想使用日历。我通过以下方式设置了当前日期: public class DateWithNoTimestamp { private static final String CURRENT_DATE_FORMAT = "yyyy-MM-dd"; public final static String getCu

我编写了一个方法,以
yyyy-MM-dd
的格式获取当前日期,并希望能够创建另一个方法来获取昨天的日期,即当前日期的前一天。所有这些需要的是日期,而不是时间戳。我也不想使用
日历
。我通过以下方式设置了当前日期:

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()
类似的方式设置它

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

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

这是一种快速而肮脏的方式,正如评论中所指出的,当夏时制转换发生时(每年两天),这种方式可能会中断。推荐的替代方案有、或新的JDK 8 time API:

LocalDate today = LocalDate.now();
LocalDate yesterday = today.minusDays(1);
您可以为“昨天”创建日期()对象:

试试这个:

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);
       } 
}

请尝试此操作以获取昨天的日期:

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);}

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

对于Java 8及更高版本,请使用类:


妈的,比我快…说得好!我没有想到:)“这是一种又快又脏的方式”你忘了加上一句,它至少在一年中的两天会中断——特别是在夏令时启用或停用的日子。“我怎么能不使用桨而坐划船过河呢?”伊杜诺,我想你可以用手划桨了吧?。。在Java中,这意味着要编写
日历的子集
。重复许多问题。搜索术语,例如:(a)仅限Java日期,(b)Java昨天或Java减去天数。具体来说,请看现代解决方案。谢谢,这和我想做的一样。机器将日期缩短到毫秒,所以这很有意义。我很感激!我建议始终将可选的
ZoneId
传递给
now
,而不是隐式地依赖JVM的当前默认时区。即使在运行时,该默认值也可以随时更改<代码>LocalDate.now(美国/蒙特利尔地区)
Date date = DateUtils.addDays(new Date(), -1);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.format(date);
LocalDate yesterday = LocalDate.now().minusDays(1L);