Date format and parse Util : Date Format « Data Type « Java






Date format and parse Util

      

/*
 * Copyright WizTools.org
 * Licensed under the Apache License, Version 2.0:
 * http://www.apache.org/licenses/LICENSE-2.0
 */
//package org.wiztools.commons;

import java.text.Format;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.regex.Pattern;

/**
 *
 * @author subwiz
 */
public final class DateUtil {
    private static final SimpleDateFormat SDF_ISO_DATE = new SimpleDateFormat(
            "yyyy-MM-dd");
    private static final SimpleDateFormat SDF_ISO_TIME = new SimpleDateFormat(
            "HH:mm:ss");

    /**
     * Returns the date in ISO 8601 format yyyy-MM-dd.
     * @param date
     * @return
     */
    public static String getAsISODateString(final Date date){
        return SDF_ISO_DATE.format(date);
    }

    /**
     * Returns the date and time in ISO 8601 format yyyy-MM-dd HH:mm:ss
     * @param date
     * @return
     */
    public static String getAsISODateTimeString(final Date date){
        return SDF_ISO_DATE.format(date) + "T" + SDF_ISO_TIME.format(date);
    }

    /**
     * Returns java.util.Date object for the ISO 8601 formatted String yyyy-MM-dd.
     * @param dateStr
     * @return
     */
    public static Date getFromISODateString(final String dateStr){
        try{
            Format fmt = new SimpleDateFormat("yyyy-MM-dd");
            return (Date) fmt.parseObject(dateStr);
        }
        catch(ParseException ex) {
            throw new IllegalArgumentException(ex);
        }
    }

    /**
     * This is an inclusive method: returns true if the date is equal to startDate or endDate.
     * @param startDate The start date.
     * @param endDate The end date.
     * @param date The date to verify.
     * @return true if the date falls between start date and end date.
     */
    public static boolean isDateBetween(final Date startDate,
            final Date endDate,
            final Date date) {
        // check if end date is later than start date:
        if(startDate.compareTo(endDate) > 0) {
            throw new IllegalArgumentException("Start date cannot be greater than end date!");
        }
        if(date.compareTo(startDate) >= 0 && date.compareTo(endDate) <= 0) {
            return true;
        }
        return false;
    }

    private static Date getDatePlus(final int unit, final Date date, final int quantity) {
        Calendar c = Calendar.getInstance();
        c.clear();
        c.setTime(date);
        c.add(unit, quantity);
        return c.getTime();
    }

    /**
     * Adds the number of days to the date and returns the new Date instance.
     * @param date Input date.
     * @param months Number of days to add.
     * @return Computed date.
     */
    public static Date getDatePlusDays(final Date date, final int days){
        return getDatePlus(Calendar.DATE, date, days);
    }

    /**
     * Adds the number of months to the date and returns the new Date instance.
     * @param date Input date.
     * @param months Number of months to add.
     * @return Computed date.
     */
    public static Date getDatePlusMonths(final Date date, final int months){
        return getDatePlus(Calendar.MONTH, date, months);
    }

    /**
     * Adds the number of years to the date and returns the new Date instance.
     * @param date Input date.
     * @param years Number of years to add.
     * @return Computed date.
     */
    public static Date getDatePlusYears(final Date date, final int years){
        return getDatePlus(Calendar.YEAR, date, years);
    }

    // Date Parsing using common pattern:
    private static final Pattern p1 = Pattern.compile("[0-9]{1,2}-[0-9]{1,2}-[0-9]{2}");
    private static final SimpleDateFormat sdf_p1 = new SimpleDateFormat("dd-MM-yy");

    private static final Pattern p2 = Pattern.compile("[0-9]{1,2}-[0-9]{1,2}-[0-9]{4}");
    private static final SimpleDateFormat sdf_p2 = new SimpleDateFormat("dd-MM-yyyy");

    private static final Pattern p3 = Pattern.compile("[0-9]{1,2}/[0-9]{1,2}/[0-9]{2}");
    private static final SimpleDateFormat sdf_p3 = new SimpleDateFormat("dd/MM/yy");

    private static final Pattern p4 = Pattern.compile("[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}");
    private static final SimpleDateFormat sdf_p4 = new SimpleDateFormat("dd/MM/yyyy");

    private static final Pattern p5 = Pattern.compile("[A-Za-z]{3} [0-9]{1,2}, [0-9]{4}");
    private static final SimpleDateFormat sdf_p5 = new SimpleDateFormat("MMM dd, yyyy");

    private static final Pattern p6 = Pattern.compile("[A-Za-z]{3} [0-9]{1,2} [0-9]{4}");
    private static final SimpleDateFormat sdf_p6 = new SimpleDateFormat("MMM dd yyyy");

    private static final Pattern p7 = Pattern.compile("[0-9]{4}-[0-9]{2}-[0-9]{2}");
    private static final SimpleDateFormat sdf_p7 = new SimpleDateFormat("yyyy-MM-dd");

    /**
     * Tries to match common patterns by which date is mentioned, and returns a Date object.
     * @param dateStr The date in common pattern.
     * @return The java.util.Date object constructed by parsing the input string.
     * @throws ParseException Thrown when not able to parse the date string.
     */
    public static Date getDateFromString(final String dateStr) throws ParseException{
        SimpleDateFormat sdf = null;
        if(p1.matcher(dateStr).matches()){
            sdf = sdf_p1;
        }
        else if(p2.matcher(dateStr).matches()){
            sdf = sdf_p2;
        }
        else if(p3.matcher(dateStr).matches()){
            sdf = sdf_p3;
        }
        else if(p4.matcher(dateStr).matches()){
            sdf = sdf_p4;
        }
        else if(p5.matcher(dateStr).matches()){
            sdf = sdf_p5;
        }
        else if(p6.matcher(dateStr).matches()){
            sdf = sdf_p6;
        }
        else if(p7.matcher(dateStr).matches()){
            sdf = sdf_p7;
        }

        if(sdf != null){
            return sdf.parse(dateStr);
        }

        throw new ParseException(dateStr + " does not match any defined pattern!", 0);
    }

    public static Date now(){
        return new Date();
    }
}
--------------
/*
 * Copyright WizTools.org
 * Licensed under the Apache License, Version 2.0:
 * http://www.apache.org/licenses/LICENSE-2.0
 */
package org.wiztools.commons;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;

/**
 *
 * @author subwiz
 */
public class DateUtilTest {

    public DateUtilTest() {
    }

    @BeforeClass
    public static void setUpClass() throws Exception {
    }

    @AfterClass
    public static void tearDownClass() throws Exception {
    }

    @Before
    public void setUp() {
    }

    @After
    public void tearDown() {
    }

    @Test
    public void testIsDateBetween() {
        System.out.println("isDateBetween()");
        Date now = DateUtil.now();
        Date startDate = DateUtil.getDatePlusDays(now, -1);
        Date endDate = DateUtil.getDatePlusDays(now, 1);
        assertTrue(DateUtil.isDateBetween(startDate, endDate, now));
    }

    /**
     * Test of getAsISODateString method, of class DateUtil.
     */
    @Test
    public void testGetAsISODateString() {
        System.out.println("getAsISODateString");
        Calendar c = Calendar.getInstance();
        c.clear();
        c.set(Calendar.YEAR, 1979);
        c.set(Calendar.MONTH, 1); // 1 means Feb.
        c.set(Calendar.DATE, 15);
        Date date = c.getTime();
        String expResult = "1979-02-15";
        String result = DateUtil.getAsISODateString(date);
        assertEquals(expResult, result);
    }

    /**
     * Test of getAsISODateTimeString method, of class DateUtil.
     */
    @Test
    public void testGetAsISODateTimeString() {
        System.out.println("getAsISODateTimeString");
        Calendar c = Calendar.getInstance();
        c.clear();
        c.set(Calendar.YEAR, 1979);
        c.set(Calendar.MONTH, 1); // 1 means Feb.
        c.set(Calendar.DATE, 15);
        c.set(Calendar.HOUR, 5);
        c.set(Calendar.MINUTE, 5);
        c.set(Calendar.SECOND, 5);
        Date date = c.getTime();
        String expResult = "1979-02-15T05:05:05";
        String result = DateUtil.getAsISODateTimeString(date);
        assertEquals(expResult, result);
    }

    /**
     * Test of getFromISODateString method, of class DateUtil.
     */
    @Test
    public void testGetFromISODateString() {
        System.out.println("getFromISODateString");
        String dateStr = "1979-02-15";
        Calendar c = Calendar.getInstance();
        c.clear();
        c.set(Calendar.YEAR, 1979);
        c.set(Calendar.MONTH, 1); // 1 means Feb.
        c.set(Calendar.DATE, 15);
        Date expResult = c.getTime();
        Date result = DateUtil.getFromISODateString(dateStr);
        assertEquals(expResult, result);
    }

    @Test
    public void testGetDatePlusDays() {
        System.out.println("getDatePlusDays");
        
        Calendar c = Calendar.getInstance();
        c.clear();
        c.set(Calendar.YEAR, 1979);
        c.set(Calendar.MONTH, 1); // 1 means Feb.
        c.set(Calendar.DATE, 15);

        Date date = DateUtil.getDatePlusDays(c.getTime(), 5);

        assertEquals(new SimpleDateFormat("dd-MM-yyyy").format(date), "20-02-1979");
    }

    @Test
    public void testGetDateFromString() throws Exception {
        Date d = DateUtil.getDateFromString("jan 1, 2010");
        assertEquals(new SimpleDateFormat("dd-MM-yyyy").format(d), "01-01-2010");

        d = DateUtil.getDateFromString("1-1-2010");
        assertEquals(new SimpleDateFormat("dd-MM-yyyy").format(d), "01-01-2010");

        d = DateUtil.getDateFromString("1/1/10");
        assertEquals(new SimpleDateFormat("dd-MM-yyyy").format(d), "01-01-2010");
    }
}

   
    
    
    
    
    
  








Related examples in the same category

1.Date Era changeDate Era change
2.Date Format
3.The Time and Date Format Suffixes
4.Display standard 12-hour time format
5.Display complete time and date information
6.Display just hour and minute
7.Display month by name and number
8.DateFormat.getDateInstance(DateFormat.SHORT)
9.Use relative indexes to simplify the creation of a custom time and date format.
10.Date Format with LocaleDate Format with Locale
11.Date Format SymbolsDate Format Symbols
12.Decimal Format with different SymbolsDecimal Format with different Symbols
13.Date format: "dd.MM.yy", "yyyy.MM.dd G 'at' hh:mm:ss z","EEE, MMM d, ''yy", "h:mm a", "H:mm", "H:mm:ss:SSS", "K:mm a,z","yyyy.MMMMM.dd GGG hh:mm aaa"Date format:
14.SimpleDateFormat.getAvailableLocalesSimpleDateFormat.getAvailableLocales
15.DateFormat.SHORT
16.This is same as MEDIUM: DateFormat.getDateInstance().format(new Date())
17.This is same as MEDIUM: DateFormat.getDateInstance(DateFormat.DEFAULT).format(new Date())
18.DateFormat.getTimeInstance(DateFormat.MEDIUM, Locale.CANADA).format(new Date())
19.DateFormat.getTimeInstance(DateFormat.LONG, Locale.CANADA).format(new Date())
20.DateFormat.getTimeInstance(DateFormat.FULL, Locale.CANADA).format(new Date())
21.DateFormat.getTimeInstance(DateFormat.DEFAULT, Locale.CANADA).format(new Date())
22.DateFormat.getDateInstance(DateFormat.LONG)
23.DateFormat.getTimeInstance(DateFormat.SHORT)
24.DateFormat.getTimeInstance(DateFormat.LONG)
25.Parse date string input with DateFormat.getTimeInstance(DateFormat.DEFAULT, Locale.CANADA)
26.Simple Date Format DemoSimple Date Format Demo
27.Format date in Medium format
28.Format date in Long format
29.Format date in Full format
30.Format date in Default format
31.Formatting day of week using SimpleDateFormat
32.Formatting day of week in EEEE format like Sunday, Monday etc.
33.Formatting day in d format like 1,2 etc
34.Formatting day in dd format like 01, 02 etc.
35.Format hour in h (1-12 in AM/PM) format like 1, 2..12.
36.Format hour in hh (01-12 in AM/PM) format like 01, 02..12.
37.Format hour in H (0-23) format like 0, 1...23.
38.Format hour in HH (00-23) format like 00, 01..23.
39.Format hour in k (1-24) format like 1, 2..24.
40.Format hour in kk (01-24) format like 01, 02..24.
41.Format hour in K (0-11 in AM/PM) format like 0, 1..11.
42.Format hour in KK (00-11) format like 00, 01,..11.
43.Formatting minute in m format like 1,2 etc.
44.Format minutes in mm format like 01, 02 etc.
45.Format month in M format like 1,2 etc
46.Format Month in MM format like 01, 02 etc.
47.Format Month in MMM format like Jan, Feb etc.
48.Format Month in MMMM format like January, February etc.
49.Format seconds in s format like 1,2 etc.
50.Format seconds in ss format like 01, 02 etc.
51.Format date in dd/mm/yyyy format
52.Format date in mm-dd-yyyy hh:mm:ss format
53.Format year in yy format like 07, 08 etc
54.Format year in yyyy format like 2007, 2008 etc.
55.new SimpleDateFormat("hh")
56.new SimpleDateFormat("H") // The hour (0-23)
57.new SimpleDateFormat("m"): The minutes
58.new SimpleDateFormat("mm")
59.SimpleDateFormat("MM"): number based month value
60.new SimpleDateFormat("s"): The seconds
61.new SimpleDateFormat("ss")
62.new SimpleDateFormat("a"): The am/pm marker
63.new SimpleDateFormat("z"): The time zone
64.new SimpleDateFormat("zzzz")
65.new SimpleDateFormat("Z")
66.new SimpleDateFormat("hh:mm:ss a")
67.new SimpleDateFormat("HH.mm.ss")
68.new SimpleDateFormat("HH:mm:ss Z")
69.SimpleDateFormat("MM/dd/yy")
70.SimpleDateFormat("dd-MMM-yy")
71.SimpleDateFormat("E, dd MMM yyyy HH:mm:ss Z")
72.SimpleDateFormat("yyyy")
73.The month: SimpleDateFormat("M")
74.Three letter-month value: SimpleDateFormat("MMM")
75.Full length of month name: SimpleDateFormat("MMMM")
76.The day number: SimpleDateFormat("d")
77.Two digits day number: SimpleDateFormat("dd")
78.The day in week: SimpleDateFormat("E")
79.Full day name: SimpleDateFormat("EEEE")
80.Add AM PM to time using SimpleDateFormat
81.Simply format a date as "YYYYMMDD"
82.Java SimpleDateFormat Class Example("MM/dd/yyyy")
83.The format used is EEE, dd MMM yyyy HH:mm:ss Z in US locale.
84.Date Formatting and Localization
85.Get a List of Short Month Names
86.Get a List of Weekday Names
87.Get a List of Short Weekday Names
88.Change date formatting symbols
89.An alternate way to get week days symbols
90.ISO8601 formatter for date-time without time zone.The format used is yyyy-MM-dd'T'HH:mm:ss.
91.ISO8601 formatter for date-time with time zone. The format used is yyyy-MM-dd'T'HH:mm:ssZZ.
92.Parsing custom formatted date string into Date object using SimpleDateFormat
93.Parse with a custom format
94.Parsing the Time Using a Custom Format
95.Parse with a default format
96.Parse a date and time
97.Parse string date value input with SimpleDateFormat("E, dd MMM yyyy HH:mm:ss Z")
98.Parse string date value input with SimpleDateFormat("dd-MMM-yy")
99.Parse string date value with default format: DateFormat.getDateInstance(DateFormat.DEFAULT)
100.Find the current date format
101.Time format viewer
102.Date format viewer
103.Returns a String in the format Xhrs, Ymins, Z sec, for the time difference between two times
104.format Duration
105.Get Date Suffix
106.Date Format Cache
107.ISO8601 Date Format
108.Explode a date in 8 digit format into the three components.
109.Date To Iso Date Time
110.Iso Date Time To Date
111.Gets formatted time
112.Format Time To 2 Digits
113.Time formatting utility.
114.ISO 8601 BASIC date format
115.Format As MySQL Datetime
116.new SimpleDateFormat( "EEE MMM d HH:mm:ss z yyyy", Locale.UK )
117.Date parser for the ISO 8601 format.
118.Parse W3C Date format
119.Pack/Unpacks date stored in kdb format
120.Provides preset formatting for Dates. All dates are returned as GMT
121.Parse RSS date format to Date object.
122.Date format for face book
123.FastDateFormat is a fast and thread-safe version of java.text.SimpleDateFormat.
124.XSD Date Time
125.Return a String value of Now() in a specify format
126.Format data to string with specified style.
127.extends Formatter