⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testjdatetime.java

📁 Jodd是一个开源的公用Java基础类库
💻 JAVA
字号:
package jodd.datetime;

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

import junit.framework.TestCase;

public class TestJDateTime extends TestCase {

	public void testSetGetMillis() {
		JDateTime jdt = new JDateTime(2003, 2, 28, 23, 59, 59.000);
		
		for (int i = 0; i < 1000; i++) {
			jdt.setMillisecond(i);
			assertEquals(i, jdt.getMillisecond());
		}
	}


	public void testSet999Millis() {

		JDateTime jdt = new JDateTime();

		jdt.set(2003, 2, 28, 23, 59, 59.999);
		assertEquals("2003-02-28 23:59:59.999", jdt.toString());

		jdt.set(2003, 2, 28, 23, 59, 60.0);
		assertEquals("2003-03-01 00:00:00.000", jdt.toString());

		// this used to be a problem
		jdt.set(2003, 2, 28, 23, 59, 59.999999);			// 6 fraction digits
		assertEquals("2003-02-28 23:59:59.999", jdt.toString());

		// this used to be a problem
		jdt.set(2003, 2, 28, 23, 59, 59.999999999999);		// 12 fraction digits  - last working
		assertEquals("2003-02-28 23:59:59.999", jdt.toString());

		jdt.set(2003, 2, 28, 23, 59, 59.9999999999999);		// 13 fraction digits
		assertEquals("2003-02-28 23:59:59.999", jdt.toString());

		jdt.set(2003, 2, 28, 23, 59, 59.99999999999999);	// 14 fraction digits (max)
		assertEquals("2003-02-28 23:59:59.999", jdt.toString());

		jdt.set(2003, 2, 28, 23, 59, 59.999999999999999);	// 15 decimals -> 59.9....9 = 60.0
		assertEquals("2003-03-01 00:00:00.000", jdt.toString());
	}


	public void testDaysInMonth() {
		JDateTime jdt = new JDateTime(2003, 1, 1);
		assertEquals(31, jdt.getMonthLength());
		assertEquals(28, jdt.getMonthLength(2));

		jdt = new JDateTime(2000, 1, 1);
		assertEquals(31, jdt.getMonthLength());
		assertEquals(29, jdt.getMonthLength(2));
	}


	public void testToString() {

		JDateTime jdt = new JDateTime(2003, 1, 1, 01, 01, 01.001);
		assertEquals("2003-01-01 01:01:01.001", jdt.toString());

		jdt.set(200, 10, 10, 10, 10, 10.012);
		assertEquals("200-10-10 10:10:10.012", jdt.toString());

		jdt.set(2003, 10, 10, 10, 10, 10.123);
		assertEquals("2003-10-10 10:10:10.123", jdt.toString());
	}

	public void testAddMonths() {
		JDateTime gt = new JDateTime(2003, 1, 31);
		gt.setMonthFix(false);
		gt.addMonth(1);
		assertEquals("2003-03-03 00:00:00.000", gt.toString());

		gt.setDate(2003, 1, 31);
		gt.addMonth(1, true);
		assertEquals("2003-02-28 00:00:00.000", gt.toString());

		gt.setDate(2004, 1, 31);
		gt.addMonth(1);
		assertEquals("2004-03-02 00:00:00.000", gt.toString());

		gt.setDate(2004, 1, 31);
		gt.addMonth(1, true);
		assertEquals("2004-02-29 00:00:00.000", gt.toString());

		gt.setDate(2003, 1, 25);
		gt.add(0, 1, 6, true);
		assertEquals("2003-02-28 00:00:00.000", gt.toString());

		gt.setDate(2003, 1, 20);
		gt.add(0, 10, 11, true);
		assertEquals("2003-11-30 00:00:00.000", gt.toString());

		gt.setDate(2004, 2, 29);
		gt.addYear(1, true);
		assertEquals("2005-02-28 00:00:00.000", gt.toString());



		gt.setDate(2004, 2, 29);
		gt.addYear(-1, true);
		assertEquals("2003-02-28 00:00:00.000", gt.toString());

		gt.setDate(2003, 11, 31);		// == 2003-12-01
		gt.add(0, -8, -31, true);
		assertEquals("2003-02-28 00:00:00.000", gt.toString());
		gt.setDate(2003, 11, 31);
		gt.add(0, -8, -31, false);
		assertEquals("2003-03-01 00:00:00.000", gt.toString());

		gt.setDate(2004, 5, 31);
		gt.addMonth(-3, true);
		assertEquals("2004-02-29 00:00:00.000", gt.toString());
		gt.setDate(2003, 11, 31);
		gt.addMonth(-10, true);
		assertEquals("2003-02-01 00:00:00.000", gt.toString());

	}


	public void testMiscSetsGets() {
		JDateTime gt = new JDateTime(2003, 11, 26, 21, 8, 25.173);
		
		gt.setYear(2002);
		assertEquals(2002, gt.getYear());

		gt.setMonth(10);
		assertEquals(10, gt.getMonth());
		
		gt.setDay(27);
		assertEquals(27, gt.getDay());

		gt.setHour(22);
		assertEquals(22, gt.getHour());

		gt.setMinute(8);
		assertEquals(8, gt.getMinute());

		gt.setSecond(24);
		assertEquals(24, (int)gt.getSecond());
		assertEquals(24.173, gt.getSecond(), 0.0005);

		gt.setSecond(25.371);
		assertEquals(25.371, gt.getSecond(), 0.0005);

		gt.setMillisecond(173);
		assertEquals(173, gt.getMillisecond());

		assertEquals("2002-10-27 22:08:25.173", gt.toString());

	}

	public void testLeapYears() {

		JDateTime gt = new JDateTime(1984, 02, 29);
		assertTrue(gt.isLeap());
		assertEquals("1984-02-29 00:00:00.000", gt.toString());

		gt.set(1985, 02, 29);
		assertFalse(gt.isLeap());
		assertEquals("1985-03-01 00:00:00.000", gt.toString());

		gt.set(2004, 02, 29);
		assertTrue(gt.isLeap());
		assertEquals("2004-02-29 00:00:00.000", gt.toString());

		gt.set(1900, 02, 29);
		assertFalse(gt.isLeap());			// not a leap year
		assertEquals("1900-03-01 00:00:00.000", gt.toString());

		gt.set(2000, 02, 29);
		assertTrue(gt.isLeap());			// a leap year
		assertEquals("2000-02-29 00:00:00.000", gt.toString());

		gt.set(1600, 02, 29);
		assertTrue(gt.isLeap());			// a leap year
		assertEquals("1600-02-29 00:00:00.000", gt.toString());

		for (int y = -4700; y < 5000; y++) {
			gt.set(y, 02, 29);
			assertEquals(31 + 29, gt.getDayOfYear());
			if (gt.isLeap()) {
				assertEquals(29, gt.getDay());
			} else {
				assertEquals(01, gt.getDay());
			}
		}
	}


	public void testFormatTemplates() {
		JDateTime gt = new JDateTime(1975, 01, 01);
		assertEquals("2442413.5", gt.getJulianDate().toString());
		assertEquals("1975-01-01 00:00:00.000", gt.get());

		gt.setFormatTemplate("YYYY.MM.DD");
		assertEquals("1975.01.01", gt.get());

		JDateTime.setDefaultFormatTemplate("YYYY/MM/DD hh:mm");
		assertEquals("1975.01.01", gt.get());

		gt.resetFormatTemplate();
		assertEquals("1975/01/01 00:00", gt.get());

		assertEquals("01: January (Jan)", gt.get("MM: MML (MMS)"));
		assertEquals("01 is 3: Wednesday (Wed)", gt.get("DD is D: DL (DS)"));

		gt.addDay(27);
		assertEquals("028 / 05 / W05", gt.get("DDD / WW / WWW"));

		JDateTime.resetDefaultFormatTemplate();
	}



	public void testGetQuotes() {
		JDateTime jdt = new JDateTime(1968, 9, 30);
		assertEquals("SHE WAS B'O'R'N ON 30 September 1968", jdt.get("SHE 'WAS' 'B''O''R''N' ON DD MML YYYY"));
		assertEquals("5 is a week number and W is letter", jdt.get("W is a week number and 'W is letter"));
	}




	public void testSetFromString() {
		JDateTime gt = new JDateTime();
		gt.set("2003-11-24 23:18:38.173");
		assertEquals("2003-11-24 23:18:38.173", gt.get());

		gt.set("2003-11-23");
		assertEquals("2003-11-23 00:00:00.000", gt.get());

		gt.set("2003-14-23");
		assertEquals("2004-02-23 00:00:00.000", gt.get());

		gt.set("2003-4-3");
		assertEquals("2003-04-03 00:00:00.000", gt.get());

		gt.set("2003-4-x");
		assertEquals("2003-04-03 00:00:00.000", gt.get());		// because of error, date is not changed

		gt.set("2003-11-23 13:67");
		assertEquals("2003-11-23 14:07:00.000", gt.get());

		gt.set("2003-11-23 13:07:55");
		assertEquals("2003-11-23 13:07:55.000", gt.get());

		gt.set("2003-11-23 13:07:5");
		assertEquals("2003-11-23 13:07:05.000", gt.get());

		gt.set("123456-7-8");
		assertEquals("123456-07-08 00:00:00.000", gt.get());

		gt.set("2003-11-23");
		assertEquals("2003-11-23 00:00:00.000", gt.get());
	}
	
	public void testLoadFromStoreTo() {
		Calendar c = Calendar.getInstance();
		c.set(2001, 00, 01, 02, 03, 04);
		c.set(Calendar.MILLISECOND, 500);
		JDateTime gt = new JDateTime();
		gt.loadFrom(c);
		assertEquals("2001-01-01 02:03:04.500", gt.toString());
		Calendar c1 = gt.getCalendarInstance();
		assertEquals(2001, c1.get(Calendar.YEAR));
		assertEquals(0, c1.get(Calendar.MONTH));
		assertEquals(1, c1.get(Calendar.DAY_OF_MONTH));
		assertEquals(2, c1.get(Calendar.HOUR_OF_DAY));
		assertEquals(3, c1.get(Calendar.MINUTE));
		assertEquals(4, c1.get(Calendar.SECOND));
		assertEquals(500, c1.get(Calendar.MILLISECOND));


		GregorianCalendar gc = new GregorianCalendar(2002, 05, 02, 03, 04, 05);
		gc.set(GregorianCalendar.MILLISECOND, 600);
		gt.loadFrom(gc);
		assertEquals("2002-06-02 03:04:05.600", gt.toString());
		GregorianCalendar gc1 = new GregorianCalendar();
		gt.storeTo(gc1);
		assertEquals(2002, gc1.get(GregorianCalendar.YEAR));
		assertEquals(5, gc1.get(GregorianCalendar.MONTH));
		assertEquals(2, gc1.get(GregorianCalendar.DAY_OF_MONTH));
		assertEquals(3, gc1.get(GregorianCalendar.HOUR_OF_DAY));
		assertEquals(4, gc1.get(GregorianCalendar.MINUTE));
		assertEquals(5, gc1.get(GregorianCalendar.SECOND));
		assertEquals(600, gc1.get(GregorianCalendar.MILLISECOND));

		
		Date d = new Date(101, 2, 3, 4, 5, 6);
		gt.loadFrom(d);
		assertEquals("2001-03-03 04:05:06.000", gt.toString());
		Date d2 = gt.getDateInstance();
		assertEquals(101, d2.getYear());
		assertEquals(2, d2.getMonth());
		assertEquals(3, d2.getDate());
		assertEquals(4, d2.getHours());
		assertEquals(5, d2.getMinutes());
		assertEquals(6, d2.getSeconds());

		
		JDateTime gt_new = new JDateTime(2003, 6, 5, 4, 3, 2.1);
		gt.loadFrom(gt_new);
		assertEquals("2003-06-05 04:03:02.100",	gt.toString());
		JDateTime gt2 = (JDateTime) gt.getInstance(JDateTime.class);
		assertEquals(2003, gt2.getYear());
		assertEquals(6, gt2.getMonth());
		assertEquals(5, gt2.getDay());
		assertEquals(4, gt2.getHour());
		assertEquals(3, gt2.getMinute());
		assertEquals(2, (int)gt2.getSecond());
		assertEquals(100, gt2.getMillisecond());

		
		java.sql.Date sd = new java.sql.Date(123, 4, 5);
		gt.loadFrom(sd);
		assertEquals("2023-05-05 00:00:00.000",	gt.toString());
		java.sql.Date sd2 = new java.sql.Date(1, 2, 3);
		gt.storeTo(sd2);
		assertEquals(123, sd2.getYear());
		assertEquals(4, sd2.getMonth());
		assertEquals(5, sd2.getDate());

		
		java.sql.Timestamp st = new java.sql.Timestamp(123, 4, 5, 6, 7, 8, 500000000);
		gt.loadFrom(st);
		assertEquals("2023-05-05 06:07:08.500",	gt.toString());
		java.sql.Timestamp st2 = gt.getSqlTimestampInstance();
		assertEquals(123, st2.getYear());
		assertEquals(4, st2.getMonth());
		assertEquals(5, st2.getDate());
		assertEquals(6, st2.getHours());
		assertEquals(7, st2.getMinutes());
		assertEquals(8, st2.getSeconds());
		assertEquals(500, st2.getNanos()/1000000);
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -