Main Tutorials

Java Date and Calendar examples

Calendar

This tutorial shows you how to work with java.util.Date and java.util.Calendar.

1. Java Date Examples

Few examples to work with Date APIs.

Example 1.1 – Convert Date to String.


	SimpleDateFormat sdf = new SimpleDateFormat("dd/M/yyyy");
	String date = sdf.format(new Date()); 
	System.out.println(date); //15/10/2013

Example 1.2 – Convert String to Date.


	SimpleDateFormat sdf = new SimpleDateFormat("dd-M-yyyy hh:mm:ss");
	String dateInString = "31-08-1982 10:20:56";
	Date date = sdf.parse(dateInString);
	System.out.println(date); //Tue Aug 31 10:20:56 SGT 1982

P.S Refer to this – SimpleDateFormat JavaDoc for detail date and time patterns.

Example 1.3 – Get current date time


	SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
	Date date = new Date();
	System.out.println(dateFormat.format(date)); //2013/10/15 16:16:39

Example 1.4 – Convert Calendar to Date


	Calendar calendar = Calendar.getInstance();
        Date date =  calendar.getTime();

2. Java Calendar Examples

Few examples to work with Calendar APIs.

Example 2.1 – Get current date time


	SimpleDateFormat sdf = new SimpleDateFormat("yyyy MMM dd HH:mm:ss");	
	Calendar calendar = new GregorianCalendar(2013,0,31);
	System.out.println(sdf.format(calendar.getTime()));

Output


2013 Jan 31 00:00:00

Example 2.2 – Simple Calendar example


	SimpleDateFormat sdf = new SimpleDateFormat("yyyy MMM dd HH:mm:ss");	
	Calendar calendar = new GregorianCalendar(2013,1,28,13,24,56);

	int year       = calendar.get(Calendar.YEAR);
	int month      = calendar.get(Calendar.MONTH); // Jan = 0, dec = 11
	int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH); 
	int dayOfWeek  = calendar.get(Calendar.DAY_OF_WEEK);
	int weekOfYear = calendar.get(Calendar.WEEK_OF_YEAR);
	int weekOfMonth= calendar.get(Calendar.WEEK_OF_MONTH);

	int hour       = calendar.get(Calendar.HOUR);        // 12 hour clock
	int hourOfDay  = calendar.get(Calendar.HOUR_OF_DAY); // 24 hour clock
	int minute     = calendar.get(Calendar.MINUTE);
	int second     = calendar.get(Calendar.SECOND);
	int millisecond= calendar.get(Calendar.MILLISECOND);
		
	System.out.println(sdf.format(calendar.getTime()));
		
	System.out.println("year \t\t: " + year);
	System.out.println("month \t\t: " + month);
	System.out.println("dayOfMonth \t: " + dayOfMonth);
	System.out.println("dayOfWeek \t: " + dayOfWeek);
	System.out.println("weekOfYear \t: " + weekOfYear);
	System.out.println("weekOfMonth \t: " + weekOfMonth);
		
	System.out.println("hour \t\t: " + hour);
	System.out.println("hourOfDay \t: " + hourOfDay);
	System.out.println("minute \t\t: " + minute);
	System.out.println("second \t\t: " + second);
	System.out.println("millisecond \t: " + millisecond);

Output


2013 Feb 28 13:24:56
year 		: 2013
month 		: 1
dayOfMonth 	: 28
dayOfWeek 	: 5
weekOfYear 	: 9
weekOfMonth     : 5
hour 		: 1
hourOfDay 	: 13
minute 		: 24
second 		: 56
millisecond     : 0

Example 2.3 – Set a date manually.


	SimpleDateFormat sdf = new SimpleDateFormat("yyyy MMM dd HH:mm:ss");	
		
	Calendar calendar = new GregorianCalendar(2013,1,28,13,24,56);	
	System.out.println("#1. " + sdf.format(calendar.getTime()));

	//update a date
	calendar.set(Calendar.YEAR, 2014);
	calendar.set(Calendar.MONTH, 11);
	calendar.set(Calendar.MINUTE, 33);
		
	System.out.println("#2. " + sdf.format(calendar.getTime()));

Output


#1. 2013 Feb 28 13:24:56
#2. 2014 Dec 28 13:33:56

Example 2.4– Add or subtract from a date.


	SimpleDateFormat sdf = new SimpleDateFormat("yyyy MMM dd");	
		
	Calendar calendar = new GregorianCalendar(2013,10,28);	
	System.out.println("Date : " + sdf.format(calendar.getTime()));

	//add one month
	calendar.add(Calendar.MONTH, 1);
	System.out.println("Date : " + sdf.format(calendar.getTime()));
		
	//subtract 10 days
	calendar.add(Calendar.DAY_OF_MONTH, -10);
	System.out.println("Date : " + sdf.format(calendar.getTime()));

Output


Date : 2013 Nov 28
Date : 2013 Dec 28
Date : 2013 Dec 18

Example 2.5– Convert Date to Calendar.


        SimpleDateFormat sdf = new SimpleDateFormat("dd-M-yyyy hh:mm:ss");
	String dateInString = "22-01-2015 10:20:56";
	Date date = sdf.parse(dateInString);

        Calendar calendar = Calendar.getInstance();
	calendar.setTime(date);

References

  1. Calendar JavaDoc
  2. Date JavaDoc
  3. Java – Convert String to Date
  4. How To Compare Dates In Java

About Author

author image
Founder of Mkyong.com, love Java and open source stuff. Follow him on Twitter. If you like my tutorials, consider make a donation to these charities.

Comments

Subscribe
Notify of
16 Comments
Most Voted
Newest Oldest
Inline Feedbacks
View all comments
Joan
10 years ago

Nice Blog!

For Calendar creation is better to use the existing constants for the Month to avoid the Tipycal error due to the fact that Calendar uses
0 -> January
1 – > Feberuary

11 -> December

So

Calendar calendar = new GregorianCalendar(2013, Calendar.NOVEMBER, 28);

is prefered over

Calendar calendar = new GregorianCalendar(2013, 10, 28);

db-bruker
9 years ago

One question about weeks and years :

I tried to use this :
private SimpleDateFormat wwyyyy = new SimpleDateFormat(“wwyyyy”);

But this fails terribly for dates late in the year that belongs to the first week of next year…
e.g 29-31. 12 2014 belongs to week 01 in 2015, but the date-format gives “012014”…

What do you do to get the correct week/year-combination for this years three last days ?

db-bruker
9 years ago
Reply to  db-bruker

Actually I found the answer on another page.
When using weeks with years, I should use
private SimpleDateFormat wwyyyy = new SimpleDateFormat(“wwYYYY”); in order to get the correct year for the week…

shggy
10 years ago

nice tutorial, really helpful.. thanks….

Adalyn
3 years ago

best site to learn java.

Adalyn
3 years ago

I like this

jon
3 years ago

best site to learn java.

Jacob Jones
6 years ago

Thank You!

PAVAN
6 years ago

HOW CAN I WRITE PROGRAM TO FIND DAY USING SPRING MVC

lito
9 years ago

Hola a todos alguíen me auida con este ejercicio de java en netbeans.

Es tracta de fer un programa en Java que demani una data i mostri per pantalla el dia següent. És a dir, el programa demanarà tres enters (un dia, un mes i un any) i mostrarà quin és el dia següent en el mateix format (dia, mes i any). El programa ha de filtrar que el valor introduït pel dia estigui entre 1 i 31 i que el valor introduït pel mes estigui entre 1 i 12. Podeu suposar que la data introduïda és real (és correcta). Es tracta de sumar 1 dia a la informació donada tenint present les següents característiques:

Hay meses que tienen 31 días.
Hay meses que tienen 30 días.
Febrero tiene 28 días salvo si el año es bisiesto ( ” bisiesto ” ) , en este caso tiene 29 días. Se considera año bisiesto aquel que es múltiple de 4, pero no es divisible por 100, a menos que lo sea también para 400 .
El programa debe estar convenientemente documentado.
Ejemplos de funcionamiento :
Entrada : 1 2 2014
Salida : 2 2 2014
Entrada : 31 1 2014
Salida : 1 2 2015
Entrada : 28 2 2 015
Salida : 1 3 2015
Entrada : 28 2 2000
Salida : 29 2 2000
Entrada : 30 11 1972
Salida : 1 12 1972

Nagendra Singh
9 years ago

I need to read a log file which contains one day data. Now I need to parse only the last hours data, whatever the last time may be in the log file… I have written a code which will read from the last line of the file..

paths = f1.listFiles();
for(File path:paths) {

ReversedLinesFileReader reverse= new ReversedLinesFileReader(path);

String line;
while ((line = reverse.readLine()) != null) {
// process the line.
if(line.contains(Constants.INFO)){
System.out.println(“line contains INFO”);
}
}

Now I need to parse only last one hour data. My last two lines of the log file looks like this.

INFO: May 30 23:59:59 Ignoring load report from EX8103 for DT5243 as it is not assigned to a loading tool.

INFO: May 30 23:59:59 Assignment succeeded: Sat May 31 00:00:01 WST 2014: SUCCESS DT4206

P Satish Patro
4 years ago
Reply to  Nagendra Singh

Calendar rightNow1Hour = Calendar.getInstance();
rightNow1Hour.set(Calendar.HOUR, rightNow1Hour.get(Calendar.HOUR)-1);
System.out.println(“1hourB4now .\t:-” + rightNow1Hour.getTime());

abhi
10 years ago

I have one doubt.
Giving just M dont work for me as in if month is Nov i give MMM and for Sept, i have to give MMMM .how can i work this out for any given month…

schmidty
9 years ago
Reply to  abhi

It’s a late response but it may be helpful to some!

SimpleDateFormat sdf = new SimpleDateFormat(“yyyy MMM dd HH:mm:ss”);
Calendar calendar = new GregorianCalendar(2013,0,31);

if(calendar.get(Calendar.MONTH) == 8 /* September */ ) {

sdf = new SimpleDateFormat(“yyyy MMMM dd HH:mm:ss”);}System.out.println(sdf.format(calendar.getTime()));

SubOptimal
10 years ago

Hello,

I would propose to use always DateFormat with setLenient(false) setting. Othwerwise unexpected errors might occur.

SimpleDateFormat sdf = new SimpleDateFormat(“dd-M-yyyy hh:mm:ss”);
sdf.setLenient(false);
String dateInString = “01-13-1982 10:20:56”;

Without calling setLenient(false) the date string would be interpreted as “Sat Jan 01 10:20:56 CET 1983”.

cheers

anga
6 years ago

pls explam in how to calculate date to day using calender