Untuk mencoba model ini cukup gampang. Pertama Anda bisa mendefinisikan terlebih dahulu kalender untuk menentukan tanggal awal dan akhir seperti dibawah:
GregorianCalendar awal = new GregorianCalendar();Lalu buat instan baru EventModel dan masukan tanggal tadi:
GregorianCalendar akhir = new GregorianCalendar();
awal.set(2009, 1, 25);
akhir.set(2012, 5, 28);
EventModel event=new EventModel(awal.getTime(),akhir.getTime());Kemudian tinggal panggil event.getYearModel() untuk mendapatkan model tahun, event.getMonthModel() untuk model bulan, dan event.getDateModel() untuk model tanggal.
Source lebih lengkapnya ada di halaman berikut.
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.GregorianCalendar;
/**
*
* @author bhangun
*
*/
public class EventModel {
int[] numDays = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
private SimpleDateFormat y;
private SimpleDateFormat m;
private SimpleDateFormat d;
private Integer startMonth;
private Integer startYear;
private Integer startDate;
private Integer endYear;
private Integer endMonth;
private Integer endDate;
private int lengthMonth;
private int lengthYear;
private Integer[][] dateModel;
private Integer[][] monthModel;
/**
* Konstruktor untuk mendapatkan awal dan akhir tanggal
* @param start awal tanggal dengan tipe Date
* @param end akhir tanggal dengan tipe Date
*/
public EventModel(Date start, Date end) {
y = new SimpleDateFormat("yyyy");
m = new SimpleDateFormat("M");
d = new SimpleDateFormat("d");
startYear = Integer.valueOf(y.format(start));
startMonth = (Integer.valueOf(m.format(start))-1);
startDate = (Integer.valueOf(d.format(start))-1);
endYear = Integer.valueOf(y.format(end));
endMonth = (Integer.valueOf(m.format(end))-1);
endDate = (Integer.valueOf(d.format(end))-1);
lengthYear =getYearModel().length;
setMonthModel(getYearModel());
Integer[][] month=getMonthModel();
lengthMonth = monthLength(month);
setDateModel(lengthMonth,startDate,endDate,month);
}
public int getMonthLength(){
return lengthMonth;
}
private int monthLength(Integer[][] month){
int length=0;
for(int i=0;i< month.length;i++){ length+=(month[i][1]-month[i][0])+1; } return length; } /** * Untuk mendapatkan model tahun * @return model tahun dalam bentuk array satu dimensi */ public Integer[] getYearModel() { int l=(endYear-startYear)+1; Integer[] range = new Integer[l]; int n = 0; int ytemp = startYear; if(startYear.equals(endYear)) range[0]=startYear; else while (ytemp <= endYear) { range[n] = ytemp; n++; ytemp++; } return range; } /** * Untuk mendapatkan model bulan dalam bentuk array * @param yearModel model tahun didapatkan dari getYearModel() * @return model bulan dalam bentuk array dua dimensi bertipe dengan format berikut: * getMonthModel()[i][0]=awal bulan, * getMonthModel()[i][1]=akhir bulan, * getMonthModel()[i][2]=tahun */ private void setMonthModel(Integer[] yearModel) { int yearLength = yearModel.length; //System.out.println("length tahun>"+yearLength);
Integer[][] range = new Integer[yearLength][3];
int n = 0;
if (yearLength==1 ) {
//System.out.println("tahun yg sama");
range[n][0]=startMonth;
range[n][1]=endMonth;
range[n][2]=yearModel[0];
} else if (yearLength >1) {
System.out.println("lebih dari 1 tahun");
range[n][0]=startMonth;
range[n][1]=11;
range[n][2]=yearModel[0];
n++;
if (yearLength > 2) {
//System.out.println("lebih dari 2 tahun");
for (int x = 2; x < yearLength; x++) { range[n][0] = 0; range[n][1] = 11; range[n][2] = yearModel[x-1]; n++; } } //--range bulan di tahun terakhir range[n][0]=0; range[n][1]=endMonth; range[n][2]=yearModel[yearLength-1]; } monthModel = range; } public Integer[][] getMonthModel(){ return monthModel; } /** * Untuk mendapatkan model tanggal event dalam bentu array * @param length banyaknya bulan dari awal hingga akhir * @param start awal bulan event * @param end akhir bulan event * @param monthModel model bulan diambil dari getMonthModel() * @return model tanggal dalam bentuk array dua dimensi bertipe integer dengan format berikut: * getDateModel()[i][0]=awal tanggal, * getDateModel()[i][1]=akhir tanggal, * getDateModel()[i][2]=bulan */ private void setDateModel(int length, int start,int end,Integer[][] monthModel) { //System.out.println("length bulan>"+length);
int sufix=1;
int fmonth = monthModel[0][0];
Integer[][] range = new Integer[length][3];
int n = 0;
if (length==1 ) {
//System.out.println("bulan yg sama");
range[n][0]=start+sufix;
range[n][1]=end+sufix;
range[n][2]=fmonth;
} else if (length >1) {
//System.out.println("lebih dari 1 bulan");
range[n][0]=start+sufix;
range[n][1]=daysInMonth(startYear, monthModel[0][0]) ;
range[n][2]=fmonth;
n++;
if (length > 2) {
//System.out.println("lebih dari 2 bulan");
//ditambah 1 untuk mulai dari digit kedua
fmonth++;
for (int x = 2; x < length; x++) { range[n][0] = sufix; int iyear=0; if (fmonth < 12) { range[n][1] = daysInMonth(monthModel[iyear][2],fmonth); range[n][2] = fmonth; fmonth++; } else { fmonth = 0; iyear++; range[n][1] = daysInMonth(monthModel[iyear][2],fmonth); range[n][2] = fmonth; fmonth++; } n++; } } //--range tanggal di bulan terakhir range[n][0]=1; range[n][1]=end+sufix; range[n][2]=monthModel[lengthYear-1][1]; } dateModel = range; } public Integer[][] getDateModel(){ return dateModel; } /** * * @param year * @param month * @return */ public Integer[] getMonth(int year, int month) { GregorianCalendar cal = new GregorianCalendar(); Integer[] days= new Integer[31]; cal.set(year, month, 1); int offset = cal.get(GregorianCalendar.DAY_OF_WEEK) - 1; offset += 7; int num = daysInMonth(year, month); for (int i = 0; i < num; ++i) { days[i]=i + 1; System.out.println(Integer.toString(i + 1)); ++offset; } return days; } /** * * @param year * @return */ public boolean isLeapYear(int year) { if (year % 4 == 0) return true; return false; } /** * * @param year * @param month * @return */ public int daysInMonth(int year, int month) { int days = numDays[month]; if (month == 1 && isLeapYear(year)) ++days; return days; } public static void main(String[] args){ GregorianCalendar awal = new GregorianCalendar(); GregorianCalendar akhir = new GregorianCalendar(); awal.set(2009, 1, 25); akhir.set(2012, 5, 28); System.out.println(awal.getTime()+"-----"+akhir.getTime()); EventModel event=new EventModel(awal.getTime(),akhir.getTime()); System.out.println("Model Tahun:"); Integer[] rangey=event.getYearModel(); for (int i = 0; i < rangey.length; i++) if(rangey[i]!=null) System.out.println("-"+rangey[i]); System.out.println("Model Bulan:"); Integer[][] rangem=event.getMonthModel(); for (int i = 0; i < rangem.length; i++) if(rangem[i][0]!=null) System.out.println(rangem[i][2]+"> " + rangem[i][0]+" - "+rangem[i][1]);
System.out.println("Model Tanggal:");
Integer[][] range=event.getDateModel();
for (int i = 0; i < range.length; i++) if(range[i][0]!=null) System.out.println((i+1)+") bulan : "+range[i][2]+" > " + range[i][0]+" - "+range[i][1]);
}
}
No comments:
Post a Comment