How to validate Time in 24 Hours format with regular expression

Time in 24-Hour Format Regular Expression Pattern


([01]?[0-9]|2[0-3]):[0-5][0-9]

Description


(				#start of group #1
 [01]?[0-9]			#  start with 0-9,1-9,00-09,10-19
 |				#  or
 2[0-3]				#  start with 20-23
)				#end of group #1
 :				#    follow by a semi colon (:)
  [0-5][0-9]			#      follw by 0..5 and 0..9, which means 00 to 59

The 24-hour clock format is start from 0-23 or 00-23 then a semi colon (:) and follow by 00-59.

Java Regular Expression Example


package com.mkyong.regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
public class Time24HoursValidator{
	
	  private Pattern pattern;
	  private Matcher matcher;
 
	  private static final String TIME24HOURS_PATTERN = 
                 "([01]?[0-9]|2[0-3]):[0-5][0-9]";
	  
	  public Time24HoursValidator(){
		  pattern = Pattern.compile(TIME24HOURS_PATTERN);
	  }
	  
	  /**
	   * Validate time in 24 hours format with regular expression
	   * @param time time address for validation
	   * @return true valid time fromat, false invalid time format
	   */
	  public boolean validate(final String time){
		  
		  matcher = pattern.matcher(time);
		  return matcher.matches();
	    	    
	  }
}

Time format that match:

1. “01:00”, “02:00”, “13:00”,
2. “1:00”, “2:00”, “13:01”,
3. “23:59″,”15:00”
4. “00:00″,”0:00”

Time format doesn’t match:

1. “24:00” – hour is out of range [0-23]
2. “12:60” – minute is out of range [00-59]
3. “0:0” – invalid format for minute, at least 2 digits
4. “13:1” – invalid format for minute, at least 2 digits
5. “101:00” – hour is out of range [0-23]

Unit Test – Time24HoursValidatorTest


package com.mkyong.regex;

import org.testng.Assert;
import org.testng.annotations.*;
 
/**
 * Time 24 hours format validator Testing
 * @author mkyong
 *
 */
public class Time24HoursValidatorTest {
 
	private Time24HoursValidator time24HoursValidator;
    
	@BeforeClass
        public void initData(){
		time24HoursValidator = new Time24HoursValidator();
        }
	
	@DataProvider
	public Object[][] ValidTime24HoursProvider() {
		return new Object[][]{
			new Object[] {"01:00"}, new Object[] {"02:00"},
                        new Object[] {"13:00"}, new Object[] {"1:00"}, 
                        new Object[] {"2:00"},new Object[] {"13:01"},
		        new Object[] {"23:59"}, new Object[] {"15:00"},
		        new Object[] {"00:00"}, new Object[] {"0:00"}
		};
	}	
	
	@DataProvider
	public Object[][] InvalidTime24HoursProvider() {
		return new Object[][]{
			new Object[] {"24:00"},new Object[] {"12:60"},
			new Object[] {"0:0"},new Object[] {"13:1"},
			new Object[] {"101:00"}
		};
	}

	@Test(dataProvider = "ValidTime24HoursProvider")
	public void ValidTime24HoursTest(String time) {
	    boolean valid = time24HoursValidator.validate(time);
	    System.out.println("Time24Hours is valid : " + time + " , " + valid);
	    Assert.assertEquals(true, valid);
	}
	
	@Test(dataProvider = "InvalidTime24HoursProvider", 
                 dependsOnMethods="ValidTime24HoursTest")
	public void InValidTime24HoursTest(String time) {
	    boolean valid = time24HoursValidator.validate(time);
	    System.out.println("Time24Hours is valid : " + time + " , " + valid);
	    Assert.assertEquals(false, valid); 
	}	
}

Unit Test – Result


Time24Hours is valid : 01:00 , true
Time24Hours is valid : 02:00 , true
Time24Hours is valid : 13:00 , true
Time24Hours is valid : 1:00 , true
Time24Hours is valid : 2:00 , true
Time24Hours is valid : 13:01 , true
Time24Hours is valid : 23:59 , true
Time24Hours is valid : 15:00 , true
Time24Hours is valid : 00:00 , true
Time24Hours is valid : 0:00 , true
Time24Hours is valid : 24:00 , false
Time24Hours is valid : 12:60 , false
Time24Hours is valid : 0:0 , false
Time24Hours is valid : 13:1 , false
Time24Hours is valid : 101:00 , false
PASSED: ValidTime24HoursTest("01:00")
PASSED: ValidTime24HoursTest("02:00")
PASSED: ValidTime24HoursTest("13:00")
PASSED: ValidTime24HoursTest("1:00")
PASSED: ValidTime24HoursTest("2:00")
PASSED: ValidTime24HoursTest("13:01")
PASSED: ValidTime24HoursTest("23:59")
PASSED: ValidTime24HoursTest("15:00")
PASSED: ValidTime24HoursTest("00:00")
PASSED: ValidTime24HoursTest("0:00")
PASSED: InValidTime24HoursTest("24:00")
PASSED: InValidTime24HoursTest("12:60")
PASSED: InValidTime24HoursTest("0:0")
PASSED: InValidTime24HoursTest("13:1")
PASSED: InValidTime24HoursTest("101:00")

===============================================
    com.mkyong.regex.Time24HoursValidatorTest
    Tests run: 15, Failures: 0, Skips: 0
===============================================


===============================================
mkyong
Total tests run: 15, Failures: 0, Skips: 0
===============================================

Reference

http://en.wikipedia.org/wiki/24-hour_clock

Want to learn more about regular expression? Highly recommend the this and classic book – “Mastering Regular Expression”



About the Author

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

Comments

avatar
13 Comment threads
1 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
13 Comment authors
Patrick GawleyIbukun BelloGent BeraniJyothiswaroopWaresz Recent comment authors
newest oldest most voted
Demba
Guest
Demba

in your pattern, 30:00 or 99:00 will pass the validator. I modify it with the pattern (0[0-9]|1[0-9]|2[0-3]):[0-5][0-9] and it’s good for the hour.

Gent Berani
Guest
Gent Berani

and this one fixes also for example:
2:00 which is incorrect
02:00 which is correct

+1

AspiringNetworkEngineer
Guest
AspiringNetworkEngineer

How about this?

/0?[0-9]|1[0-9]|2[0-3]:^[0-5][0-9]$/

I believe this works in Perl so whatever the Java equivalent is for ^, $, or / is.

alvaropg
Guest
alvaropg

In Javascript, this time “30:22” it’s validated …

Patrick Gawley
Guest
Patrick Gawley

Brilliant, thanks.

Ibukun Bello
Guest
Ibukun Bello

Thanks

Jyothiswaroop
Guest
Jyothiswaroop

Thanks alot for regex

Waresz
Guest
Waresz

Gracias locura

Andy
Guest
Andy

God what a pain web development is! Can’t someone develop a framework that’s logical and easy to use. RegExp is a pain in the arse and takes days to learn and I hate it!!1

Skovmand
Guest
Skovmand

Hi. Thanks for the regex! I would add a beginning and an end delimiter to this.
/^([01]?[0-9]|2[0-3]):[0-5][0-9]$/

sKopheK
Guest
sKopheK

seems like quite a lot coding for task that simple…

Matt Frear
Guest
Matt Frear

Thanks for the time regex.

-Matt

paglu
Guest
paglu

First learn how to implement your logical planning through simple programming. After that try going for programming advanced features else you people would never become a skilled programmer.

trackback
10 Java Regular Expression Examples You Should Know | Regular Expressions

[…] ==> See the explanation and example here […]