The problem that many new Java programmers -- me included -- face when they start dealing with dates and times is : Given a java.util.Date object get month, date and year fields in separate variables.
The usual misunderstanding here is that the class java.util.Date
is almost deprecated and all things you expect to be able to perform with dates are done using the java.util.Calendar;
class.
Calendar is an abstract class whose javadoc can be found here. The class provides get and set methods that allow you to alter any of the fields that constitute a point in time. The following example demonstrates one way to calculate the date corresponding to the start of the current term, using the Calendar get and set functions. It also shows how to convert a Date to a Calendar and vice versa.
private void calStartOfCurrentTerm() { // create a new Gregorian Calendar Calendar c = new GregorianCalendar(); // you can synchronize a Calendar with a date by using the // setTime() method c.setTime( new Date()); // once you get a Calendar extracting field information is // as easy as .... int month = c.get( Calendar.MONTH); int day = c.get(Calendar.DAY_OF_MONTH); int year = c.get(Calendar.YEAR); // let's calculate the date that corresponds to the // start of the current term int newMonth; switch (month) { case Calendar.JANUARY: case Calendar.FEBRUARY: case Calendar.MARCH: newMonth = Calendar.JANUARY; break; case Calendar.APRIL: case Calendar.MAY: case Calendar.JUNE: newMonth = Calendar.JANUARY; break; case Calendar.JULY: case Calendar.AUGUST: case Calendar.SEPTEMBER: newMonth = Calendar.JULY; break; default: newMonth = Calendar.OCTOBER; } // adjust the calendar to point to the new date c.set(Calendar.MONTH, newMonth); c.set(Calendar.DAY_OF_MONTH, 1); // get the information to a new date variable Date startOfTerm = c.getTime(); // display results System.out.println("Day is " + day +" month is " + month + " year is " + year); System.out.println( startOfTerm.toString()); }
Here is a slightly different version that returns an object of type oracle.jbo.domain.Date
import java.sql.Timestamp; import java.util.Calendar; import java.util.GregorianCalendar; import oracle.jbo.domain.Date; private Date getStartOfTerm() { // create a new Gregorian Calendar Calendar c = new GregorianCalendar(); // once you get a Calendar extracting field information is // as easy as .... int month = c.get(Calendar.MONTH); // let's calculate the date that corresponds to the // start of the current term int newMonth; switch (month) { case Calendar.JANUARY: case Calendar.FEBRUARY: case Calendar.MARCH: newMonth = Calendar.JANUARY; break; case Calendar.APRIL: case Calendar.MAY: case Calendar.JUNE: newMonth = Calendar.JANUARY; break; case Calendar.JULY: case Calendar.AUGUST: case Calendar.SEPTEMBER: newMonth = Calendar.JULY; break; default: newMonth = Calendar.OCTOBER; } // adjust the calendar to point to the new date c.set(Calendar.MONTH, newMonth); c.set(Calendar.DAY_OF_MONTH, 1); c.set(Calendar.HOUR_OF_DAY, 0); c.set(Calendar.MINUTE, 0); c.set(Calendar.SECOND, 0); c.set(Calendar.MILLISECOND, 0); // get the information to a new date variable java.util.Date javaDate = c.getTime(); Timestamp st = new Timestamp(javaDate.getTime()); return new Date(st); }
PS:. Finally There is one last thing I have to get used to. "Copy as HTML" on JDeveloper 10g, does not work on openSUSE 10.2.
No comments :
Post a Comment