package com.levelup.java.date;

import static org.junit.Assert.assertTrue;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import org.apache.commons.lang3.time.DateUtils;
import org.apache.log4j.Logger;
import org.joda.time.DateTime;
import org.junit.Test;

/**
 * This java example will demonstrate truncating time in java
 * 
 * @author Justin Musgrove
 * @see <a href='http://www.leveluplunch.com/java/examples/truncate-time/'>Truncate time</a>
 * 
 */
public class TruncateTime {

	private static final Logger logger = Logger.getLogger(TruncateTime.class);
	
	@Test
	public void truncate_time_in_java () {

		Calendar cal = Calendar.getInstance(); 
		cal.set(Calendar.HOUR_OF_DAY, 0);
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.SECOND, 0);
		cal.set(Calendar.MILLISECOND, 0);
		
		// format object
		SimpleDateFormat dateFormatter = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss");
		String randomTruncatedDateFormatted = dateFormatter.format(cal.getTimeInMillis());

		logger.info("Truncated date: " + randomTruncatedDateFormatted);
		
		assertTrue(randomTruncatedDateFormatted.contains("12:00:00"));
	}

	@Test
	public void truncate_time_in_java_with_joda () {
		
		DateTime dt = new DateTime().dayOfMonth().roundFloorCopy();

		// just for formatting purposes
		SimpleDateFormat dateFormatter = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss");
		String randomTruncatedDateFormatted = dateFormatter.format(dt.getMillis());

		logger.info("Truncated date: " + randomTruncatedDateFormatted);

		
		assertTrue(randomTruncatedDateFormatted.contains("12:00:00"));
	}

	@Test
	public void truncate_time_in_java_with_apache_commons () {
		
		Calendar cal = Calendar.getInstance();
		Date someRandomTruncatedDate = DateUtils.truncate(cal.getTime(), Calendar.DATE);
		
		// format object
		SimpleDateFormat dateFormatter = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss z");
		String randomTruncatedDateFormatted = dateFormatter.format(someRandomTruncatedDate);
		
		logger.info("Truncated date: " + randomTruncatedDateFormatted);
		
		assertTrue(randomTruncatedDateFormatted.contains("12:00:00"));
	}

}