📄 testjdatetime.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 + -