【问题标题】:How to determine the date one day prior to a given date in Java?如何确定Java中给定日期前一天的日期?
【发布时间】:2010-10-19 05:29:27
【问题描述】:

我假设 Java 有一些内置的方法可以做到这一点。

给定一个日期,我如何确定该日期前一天的日期?

例如,假设给我 2009 年 3 月 1 日。上一个日期是 2009 年 2 月 28 日。如果给我的是 2008 年 3 月 1 日,那么之前的日期应该是 2008 年 2 月 29 日。

【问题讨论】:

  • 建议 Joda Time 的答案数量超过/低于 3.5。我会接手的。
  • 睡眠(-86400);日期.getDate() ? :-)
  • @mmyers:我看过 Joda Time,但我认为 Java 的库肯定可以自己处理这个简单的任务。也许不是……
  • @William Brendel:通常,这没有什么区别。看来我这次输了。

标签: java date leap-year


【解决方案1】:

使用 java.time.Instant

Date.from(Instant.now().minus(Duration.ofDays(1)))

【讨论】:

    【解决方案2】:

    这会有所帮助。

    getPreviousDateForGivenDate("2015-01-19", 10);
    getPreviousDateForGivenDate("2015-01-19", -10);
    
    public static String getPreviousDateForGivenDate(String givenDate, int datesPriorOrAfter) {
        String saleDate = getPreviousDate(datesPriorOrAfter);
    
        try {
            DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
            String[] arr = givenDate.split("-", 3);
            Calendar cal = new GregorianCalendar(Integer.parseInt(arr[0]), Integer.parseInt(arr[1])-1, Integer.parseInt(arr[2]));
            cal.add(Calendar.DAY_OF_YEAR, datesPriorOrAfter);    
            saleDate = dateFormat.format(cal.getTime());
    
        } catch (Exception e) {
            System.out.println("Error at getPreviousDateForGivenDate():"+e.getMessage());
        }
    
        return saleDate;
    }
    

    【讨论】:

      【解决方案3】:

      使用日历界面。

      Calendar cal = Calendar.getInstance();
      cal.setTime(myDate);
      cal.add(Calendar.DAY_OF_YEAR,-1);
      Date oneDayBefore= cal.getTime();
      

      以这种方式进行“添加”可确保您获得有效日期。这也适用于一年中的第一天,例如如果 myDate 是 2012 年 1 月 1 日,oneDayBefore 将是 2011 年 12 月 31 日。

      【讨论】:

      • 正是我想要的。谢谢!
      • 顺便说一句,Calendar.getInstance() 可能是实现日历实例的更通用的方式。
      【解决方案4】:

      使用date4j 库:

      DateTime yesterday = today.minusDays(1);
      

      【讨论】:

        【解决方案5】:
        import java.util.Calendar;
        import java.util.GregorianCalendar;
        import static java.util.Calendar.*;
        
        
        public class TestDayBefore {
        
            public static void main(String... args) {
                Calendar calendar = GregorianCalendar.getInstance();
                calendar.set(YEAR, 2009);
                calendar.set(MONTH, MARCH);
                calendar.set(DAY_OF_MONTH, 1);
                System.out.println(calendar.getTime()); //prints Sun Mar 01 23:20:20 EET 2009
                calendar.add(DAY_OF_MONTH, -1);
                System.out.println(calendar.getTime()); //prints Sat Feb 28 23:21:01 EET 2009
        
            }
        }
        

        【讨论】:

          【解决方案6】:

          你也可以使用Joda-Time,一个非常好的Java库来操作日期:

          DateTime result = dt.minusDays(1);
          

          【讨论】:

            【解决方案7】:

            java.util.Calendar 类允许我们从日期中添加或减去任意数量的天/周/月/任意数量。只需使用 add() 方法:

            http://java.sun.com/j2se/1.5.0/docs/api/java/util/Calendar.html

            例子:

            Calendar date = new GregorianCalendar(2009, 3, 1);
            date.add(Calendar.DATE, -1);
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-09-28
              • 1970-01-01
              • 1970-01-01
              • 2018-12-05
              相关资源
              最近更新 更多