2009-04-13 7 views
15

Я предполагаю, что Java имеет встроенный способ сделать это.Как определить дату за день до указанной даты на Java?

Учитывая дату, как я могу определить дату за день до этой даты?

Например, предположим, что мне дано 3/1/2009. Предыдущая дата - 28.02.2009. Если бы мне дали 3/1/2008, предыдущая дата была бы 2/29/2008.

+0

Превосходное количество ответов, предлагающих время Джоды, составляет 3,5. Я займусь кончиной. –

+3

сон (-86400); Date.getDate()? :-) – Tanktalus

+0

@mmyers: Я смотрел на Joda Time, но я думал, что библиотека Java может справиться с этой простой задачей самостоятельно. Может быть, не ... –

ответ

45

Используйте интерфейс «Календарь».

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

Выполнение «добавления» таким образом гарантирует, что вы получите действительную дату. Это действительно для 1-го числа года, например, если myDate - 1 января 2012 года, oneDayBefore будет 31 декабря 2011 года.

+0

Именно то, что я искал. Благодаря! –

+1

Будет ли это работать, если дата 1 января? – MountainX

+0

@MountainX - есть. – djechlin

2

Класс 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); 
0
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 

    } 
} 
7

Вы также можете использовать Joda-Time, очень хорошая библиотека Java манипулировать даты:

DateTime result = dt.minusDays(1); 
1

С библиотекой date4j:

DateTime yesterday = today.minusDays(1); 
1

Это поможет.

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

 Смежные вопросы

  • Нет связанных вопросов^_^