Java Calendar and Date Operations
Feb 11th, 2008 by Dhanya James
Java - Find a given date belongs in which quarter:
SimpleDateFormat sdf = new SimpleDateFormat();
sdf.applyPattern(”MM/dd/yyyy”);
Calendar calendar = Calendar.getInstance();
Date processDate = sdf.parse(”4/10/2007″);
calendar.setTime(processDate);
Date date1 = calendar.getTime();
int quarter = TestDate.getQuarter(date1);
System.out.println(”Quarter for the date : “+sdf.format(calendar.getTime())+” is : “+quarter);
Prints the following Result :
Quarter for the date : 04/10/2007 is : 2
Java - Code for getQuarter() function:
public static int getQuarter(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int year = calendar.get(Calendar.YEAR);
int[] months = { 3, 6, 9, 12 };
int count = 0;
do {
calendar.set(year, months[count++], 1);
Date tempDt = calendar.getTime();
if(date.compareTo(tempDt)
return count;
} while(count
return 0;
}
Java - Find previous quarter begin and end dates for a given date:
SimpleDateFormat sdf = new SimpleDateFormat();
sdf.applyPattern(”MM/dd/yyyy”);
Calendar calendar = Calendar.getInstance();
Date processDate = sdf.parse(”4/10/2007″);
calendar.setTime(processDate);
Date date1 = calendar.getTime();
int quarter = TestDate.getQuarter(date1);
String currentQuarterBeginDate = “”;
String fromDt=”";
String toDt=”";
if ( quarter ==1){
currentQuarterBeginDate = “01/01/”+calendar.get(Calendar.YEAR);
}
if ( quarter ==2){
currentQuarterBeginDate = “04/01/”+calendar.get(Calendar.YEAR);
}
if ( quarter ==3){
currentQuarterBeginDate = “07/01/”+calendar.get(Calendar.YEAR);
}
if ( quarter ==4){
currentQuarterBeginDate = “10/01/”+calendar.get(Calendar.YEAR);
}
calendar.setTime(sdf.parse(currentQuarterBeginDate));
calendar.add(Calendar.MONTH, 3*-1);
fromDt = sdf.format(calendar.getTime());
String formmatedQuarterBeginDate = sdf.format(calendar.getTime());
calendar.setTime(new java.util.Date(formmatedQuarterBeginDate));
calendar.add(Calendar.MONTH, 3);
calendar.add(Calendar.DAY_OF_MONTH, -1);
toDt = sdf.format(calendar.getTime());
System.out.println(”Previous Quarter Begin Date : “+fromDt);
System.out.println(”Previous Quarter End Date : “+toDt);
Prints the following Result :
Previous Quarter Begin Date : 01/01/2007
Previous Quarter End Date : 03/31/2007
Java - Find previous Date for a given date:
SimpleDateFormat sdf = new SimpleDateFormat();
sdf.applyPattern(”MM/dd/yyyy”);
Calendar calendar = Calendar.getInstance();
Date processDate = sdf.parse(”4/10/2007″);
calendar.setTime(processDate);
calendar.add(Calendar.DAY_OF_MONTH, -1);
String previousDate = sdf.format(calendar.getTime());
System.out.println(”Previous Date is :”+previousDate);
Prints the following Result :
Previous Date is :04/09/2007
Java - Find previous Sunday for a given date:
SimpleDateFormat sdf = new SimpleDateFormat();
sdf.applyPattern(”MM/dd/yyyy”);
Calendar calendar = Calendar.getInstance();
Date processDate = sdf.parse(”4/24/2007″);
calendar.setTime(processDate);
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
calendar.add(Calendar.DAY_OF_MONTH,-1*(dayOfWeek-1));
calendar.setTime(calendar.getTime());
String endDt = sdf.format(calendar.getTime());
System.out.println(”Previous Sunday is :”+endDt);
Prints the following Result :
Previous Sunday is :04/22/2007
Enjoy!!!!



Just thought I’d share a slightly different approach that is class-based and will return the start/end dates of a given quarter. Note it’s written in Groovy.
Josh
—————–
import static java.util.Calendar.*
class Quarter {
Date date
Date start
Date end
int monthInQuarter
Quarter() {
this.date = new Date()
init()
}
Quarter(Date date) {
this.date = date
init()
}
Quarter getNext() {
Calendar c = Calendar.getInstance()
c.time = end
c.add(DATE, 7)
return new Quarter(c.time)
}
Quarter getPrevious() {
Calendar c = Calendar.getInstance()
c.time = start
c.add(DATE, -7)
return new Quarter(c.time)
}
private void init() {
Calendar c = Calendar.getInstance()
c.time = date
int month = c.get(MONTH) + 1 // java uses 0-11 notation
monthInQuarter = month % 3
monthInQuarter = (monthInQuarter == 0) ? 3 : monthInQuarter
calculateStart()
calculateEnd()
}
private void calculateStart() {
Calendar c = Calendar.getInstance()
c.time = date
c.add(MONTH, (1 - monthInQuarter))
c.set(DATE, 1)
c.set(HOUR_OF_DAY, 0)
c.set(MINUTE, 0)
c.set(SECOND, 0)
c.set(MILLISECOND, 0)
start = c.time
}
private void calculateEnd() {
Calendar c = Calendar.getInstance()
c.time = date
c.add(MONTH, (3 - monthInQuarter))
c.set(DATE, c.getActualMaximum(Calendar.DATE))
c.set(HOUR_OF_DAY, 23)
c.set(MINUTE, 59)
c.set(SECOND, 59)
c.set(MILLISECOND, 999)
end = c.time
}
String toString() {
String pattern = ‘(%1$tm-%1$td-%1$tY) %2$tm-%2$td-%2$tY - %3$tm-%3$td-%3$tY’
return String.format(pattern, date, start, end)
}
}
Hi,
just to share another version of getQuarter(Date date):
public static int getQuarter(Date date)
{
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return (calendar.get(Calendar.MONTH) + 3) / 3;
}
find begin and end dates of the previous quarter:
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, -1 - (cal.get(Calendar.MONTH) % 3));
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DATE));
System.out.println(sdf.format(cal.getTime()));
Calendar cal2 = Calendar.getInstance();
cal2.add(Calendar.MONTH, -3 - (cal2.get(Calendar.MONTH) % 3));
cal2.set(Calendar.DAY_OF_MONTH, 1);
System.out.println(sdf.format(cal2.getTime()));
find begin and end dates of the current quarter:
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, 2 - (cal.get(Calendar.MONTH) % 3));
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DATE));
System.out.println(sdf.format(cal.getTime()));
Calendar cal2 = Calendar.getInstance();
cal2.add(Calendar.MONTH, 0 - (cal2.get(Calendar.MONTH) % 3));
cal2.set(Calendar.DAY_OF_MONTH, 1);
System.out.println(sdf.format(cal2.getTime()));
find begin and end dates of the next quarter:
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, 5 - (cal.get(Calendar.MONTH) % 3));
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DATE));
System.out.println(sdf.format(cal.getTime()));
Calendar cal2 = Calendar.getInstance();
cal2.add(Calendar.MONTH, 3 - (cal2.get(Calendar.MONTH) % 3));
cal2.set(Calendar.DAY_OF_MONTH, 1);
System.out.println(sdf.format(cal2.getTime()));