- import java.sql.Timestamp;
- import java.util.Calendar;
- import java.util.Date;
- import java.util.GregorianCalendar;
- public class RDate {
- private long millis;
- public RDate(){
- // timezone and locale?
- GregorianCalendar c = new GregorianCalendar();
- int year = c.get(Calendar.YEAR);
- int month = c.get(Calendar.MONTH);
- int day = c.get(Calendar.DAY_OF_MONTH);
- c.clear();
- c.set(year, month, day);
- millis = c.getTimeInMillis();
- }
- public RDate(String rCal) {
- // timezone and locale?
- GregorianCalendar c = new GregorianCalendar();
- try {
- String[] rCalArray = rCal.split("-");
- String yearString = rCalArray[0];
- int year = Integer.parseInt(yearString);
- int month = Integer.parseInt(rCalArray[1]);
- int day = Integer.parseInt(rCalArray[2]);
- if(yearString.length()==4
- &&(month>0&&month<=12)
- &&(day>0&&day<=31)){
- c.clear();
- c.set(year, month-1, day);}
- else{throw new IllegalArgumentException(rCal);}
- } catch (NumberFormatException e) {
- throw new IllegalArgumentException(rCal, e);
- }
- millis = c.getTimeInMillis();
- }
- public RDate(int year, int month, int day){
- // timezone and locale?
- GregorianCalendar c = new GregorianCalendar();
- if((year<=9999 && year>=1000)
- &&(month>0 && month<=12)
- &&(day>0 && day<=31)){
- c.clear();
- c.set(year, month-1, day);}
- else{throw new IllegalArgumentException(year+"-"+month+"-"+day);}
- millis = c.getTimeInMillis();
- }
- /**
- * Construct an RCalendar object from an (SQL) Date object
- * @param date
- */
- public RDate(Date date){
- // default timezone and locale?
- Calendar cal = Calendar.getInstance();
- cal.clear();
- cal.setTime(date);
- GregorianCalendar c = new GregorianCalendar();
- c.clear();
- int year = cal.get(Calendar.YEAR);
- int month = cal.get(Calendar.MONTH);
- int day = cal.get(Calendar.DAY_OF_MONTH);
- c.set(year, month, day);
- millis = c.getTimeInMillis();
- }
- /**
- * Construct an RCalendar object from a Calendar object
- * @param cal
- */
- public RDate(Calendar cal) {
- GregorianCalendar c = new GregorianCalendar();
- c.clear();
- int year = cal.get(Calendar.YEAR);
- int month = cal.get(Calendar.MONTH);
- int day = cal.get(Calendar.DAY_OF_MONTH);
- c.set(year, month, day);
- millis = c.getTimeInMillis();
- }
- /**
- * Construct and RCalendar object from an SQL Timestamp object
- * @param Timestamp
- */
- public RDate(Timestamp t){
- long milliseconds = t.getTime();
- Calendar cal = Calendar.getInstance();
- cal.clear();
- cal.setTime(new java.util.Date(milliseconds));
- GregorianCalendar c = new GregorianCalendar();
- c.clear();
- int year = cal.get(Calendar.YEAR);
- int month = cal.get(Calendar.MONTH);
- int day = cal.get(Calendar.DAY_OF_MONTH);
- c.set(year, month, day);
- millis = c.getTimeInMillis();
- }
- /**
- * Construct an RCalendar which is equal to today's date
- * plus some integer number of DATE (days), WEEK_OF_MONTH,
- * MONTH, or YEAR. Use negative numbers to subtract.
- * @param String d, w, m, or y indicates that the amount
- * should be added to days, weeks, months, or years
- * @param amount is the number of d,w,m, or y to be added
- */
- public RDate(String dwmy, int amount){
- GregorianCalendar c = new GregorianCalendar();
- int year = c.get(Calendar.YEAR);
- int month = c.get(Calendar.MONTH);
- int day = c.get(Calendar.DATE);
- c.clear();
- c.set(year, month, day);
- if(dwmy.equals("d")){c.add(Calendar.DATE, amount);}
- if(dwmy.equals("w")){c.add(Calendar.WEEK_OF_YEAR, amount);}
- if(dwmy.equals("m")){c.add(Calendar.MONTH, amount);}
- if(dwmy.equals("y")){c.add(Calendar.YEAR, amount);}
- millis = c.getTimeInMillis();
- }
- public Date toDate() {
- return new Date(millis);
- }
- public GregorianCalendar toCalendar() {
- GregorianCalendar c = new GregorianCalendar();
- c.setTimeInMillis(millis);
- return c;
- }
- public long toMilliseconds() {
- return millis;
- }
- /**
- * Overrides toString so that RCalendar objects print in the usual real-world
- * year-month-day form. Does not use leading 0's for single-digit months and days.
- * @return String YYYY-M(M)-D(D)
- */
- public String toString(){
- GregorianCalendar c = new GregorianCalendar();
- c.setTimeInMillis(millis);
- return "" + c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH)+1) + "-" + c.get(Calendar.DAY_OF_MONTH);
- }
- }