1. Introduction

Date operations may be painful in most of the programming languages. You may spend most of your time to convert dates from one format to another one. In Groovy, date operations are very easy. Groovy has lots of functions extended from JDK Date API, this allows us to use date related operations in an easier way. Let’s have a look at how can we use Groovy date extension.

2. Warmup

In Java, we use Date or Calendar in for specific cases. Date class is a simple class and it has backward compatibility. If you want to do some date arithmetic operations, use Calendar class instead. In Groovy, we can use both Date or Calendar . You can see following example for initializing and getting current date.



GroovyDateInitialization.groovy

package com.javacodegeeks.groovy.date import static java.util.Calendar.* class GroovyDateInitialization { static main(args) { def date = new Date() println date // Sat Sep 26 19:22:50 EEST 2015 def calendar = Calendar.instance println calendar // java.util.GregorianCalendar[time=1443284933986, ... } }

As you can see, date variable is a simple date, but calendar has a value class with some instance variables. I have provided only one instance variable, because it is very long. This is simple in Java too, but what about parsing?

3. Date Parsing

Date parsing is the operation of conversion date string to date object. You can simply parse date string to date object easily like below.

GroovyDateParsing.groovy

package com.javacodegeeks.groovy.date import static java.util.Calendar.* class GroovyDateParsing { static main(args) { def date = new Date().parse("dd.MM.yyy", '18.05.1988') println date // Wed May 18 00:00:00 EEST 1988 def extendedDate = new Date().parse("dd.MM.yyy HH:mm:ss", '18.05.1988 12:15:00') println extendedDate // Wed May 18 12:15:00 EEST 1988 } }

On line 08 , we used parse function to parse provided date string by using date format provided as first argument. In line 11 , hour, minute, and seconds parameters provided in the format and date string in order to be parse extended date. In first example on line 08 , it printed 00:00:00, because we did not provided hour, minute, and seconds section. You can have a look at here to see full date formats.

4. Date Formatting

Sometimes, we need to format date object into desired format. In Groovy, you can use format function to format date object. You can see a quick example below.

GroovyDateFormatting.groovy

package com.javacodegeeks.groovy.date import static java.util.Calendar.* class GroovyDateFormatting { static main(args) { def date = new Date().parse("dd.MM.yyy", '18.05.1988') def formattedDate = date.format("dd/MM/yyy") println formattedDate // 18/05/1988 } }

In this example, we simply parsed the date string into a date object on line 08 , and then we have formatted that date object by using format function on line 09 . In order to format a date object, you can provide date format as argument.

5. Date Arithmetic

The main advantage of the Groovy date extension is the doing arithmetic operations on date object. If you have used Joda Time before, you will be very familiar to this topic. Let say that, you have a date and you want to find the date object which is 5 days after from previous date. In order to do that, you can use following example.

GroovyDateArithmetic.groovy

package com.javacodegeeks.groovy.date class GroovyDateArithmetic { static main(args) { def date = new Date().parse("dd.MM.yyy", '18.05.1988') def datePlus = date.clone() def dateMinus = date.clone() datePlus = datePlus + 5 println datePlus // Mon May 23 00:00:00 EEST 1988 datePlus = datePlus.plus(5) println datePlus // Sat May 28 00:00:00 EEST 1988 dateMinus = dateMinus - 10 println dateMinus // Sun May 08 00:00:00 EEST 1988 dateMinus = dateMinus.minus(10) println dateMinus // Thu Apr 28 00:00:00 EEST 1988 def dateInterval = dateMinus..<datePlus println dateInterval // [Thu Apr 28 00:00:00 EEST 1988,.., Fri May 27 00:00:00 EEST 1988] } }

In above example, we have done some arithmetic operations. First, we have cloned date to two variables dateMinus , and datePlus to simulate two different dates. In order to increment date object by 5 days, we have used datePlus = datePlus + 5 on line 11 . Alternatively you can use plus function like on line 15 . In same way, we have decremented the dateMinus by 10 by using subtracting sign in dateMinus = dateMinus - 10 . Alternatively, you can use minus function like on line 23 . We have also find the dates between two dates dateMinus and datePlus by using the range(..) function in Groovy. You can see the date ranges on line 29 .

6. Subscript Operators

In some cases, you may need to get year, month, date values separately from date objects, or you may need to set those fields in date objects separately. Subscript operators helps us to get that specific values. In fact, Groovy uses getAt() and putAt() respectively to get and set specific subscript fields in date object. Let’s see some examples.

GroovyDateSubscriptOperators.groovy

package com.javacodegeeks.groovy.date import static java.util.Calendar.* class GroovyDateSubscriptOperators { static main(args) { def date = new Date().parse("dd.MM.yyy", '18.05.1988') println date[YEAR] // 1988 println date[MONTH] // 4 println date[DATE] // 18 date[YEAR] = 1999 date[MONTH] = 7 date[DATE] = 20 println date // Fri Aug 20 00:00:00 EEST 1999 } }

In this example, on line 10 , 11 , and 12 we get the year, month, and day value from date object. This is something like getting value from map by providing the map key. But, where did YEAR , MONTH , and DATE come from? They come from the static import import static java.util.Calendar.* on line 03 . Be careful about the month value on line 11 , and it is the index of the month. You can also set month, year, and day values like setting a map on line 14 , 15 , and 16 .

7. Conclusion

Date operations are the operations that we used during software development and it is really painful on converting dates from one format to another. In Groovy, this operations are very simplified, and you can easily perform date operations like applying arithmetic in Math. You can parse date string, format a date object, increment – decrement date, and apply subscript operators on date objects without using any third party libraries.