001: // Copyright (c) 2003-2007, Jodd Team (jodd.sf.net). All Rights Reserved.
002:
003: package jodd.datetime;
004:
005: import java.util.Calendar;
006: import java.util.GregorianCalendar;
007: import java.util.Random;
008:
009: import junit.framework.TestCase;
010:
011: public class TimeUtilTest extends TestCase {
012:
013: public void testFromJulian() {
014:
015: DateTimeStamp time;
016: time = TimeUtil.fromJulianDate(0.0);
017: assertEquals("-4712-1-1 12:0:0.0", time.toString());
018:
019: time = TimeUtil.fromJulianDate(59.0);
020: assertEquals("-4712-2-29 12:0:0.0", time.toString());
021:
022: time = TimeUtil.fromJulianDate(366.0);
023: assertEquals("-4711-1-1 12:0:0.0", time.toString());
024:
025: time = TimeUtil.fromJulianDate(731.0);
026: assertEquals("-4710-1-1 12:0:0.0", time.toString());
027:
028: time = TimeUtil.fromJulianDate(1721058.0);
029: assertEquals("0-1-1 12:0:0.0", time.toString());
030:
031: time = TimeUtil.fromJulianDate(1721057.0);
032: assertEquals("-1-12-31 12:0:0.0", time.toString());
033:
034: time = TimeUtil.fromJulianDate(1721117.0);
035: assertEquals("0-2-29 12:0:0.0", time.toString());
036:
037: time = TimeUtil.fromJulianDate(1721118.0);
038: assertEquals("0-3-1 12:0:0.0", time.toString());
039:
040: time = TimeUtil.fromJulianDate(1721423.0);
041: assertEquals("0-12-31 12:0:0.0", time.toString());
042:
043: time = TimeUtil.fromJulianDate(1721424.0);
044: assertEquals("1-1-1 12:0:0.0", time.toString());
045:
046: time = TimeUtil.fromJulianDate(2440587.5);
047: assertEquals("1970-1-1 0:0:0.0", time.toString());
048:
049: time = TimeUtil.fromJulianDate(2451774.726007);
050: assertEquals("2000-8-18 5:25:27.004", time.toString());
051:
052: time = TimeUtil.fromJulianDate(2451774.72600701);
053: assertEquals("2000-8-18 5:25:27.005", time.toString());
054:
055: time = TimeUtil.fromJulianDate(2451774.72600702);
056: assertEquals("2000-8-18 5:25:27.006", time.toString());
057:
058: time = TimeUtil.fromJulianDate(2299160.49998901);
059: assertEquals("1582-10-4 23:59:59.05", time.toString());
060:
061: time = TimeUtil.fromJulianDate(2299160.5);
062: assertEquals("1582-10-15 0:0:0.0", time.toString());
063:
064: time = TimeUtil.fromJulianDate(2147438064.499989);
065: assertEquals("5874773-8-15 23:59:59.052", time.toString());
066: }
067:
068: public void testFix() {
069: DateTimeStamp t = new DateTimeStamp();
070: t.year = 2003;
071: t.month = 7;
072: t.day = 26;
073: t.hour = 0;
074: t.minute = 0;
075: t.second = 2;
076: double jd = TimeUtil.toJulianDate(t).doubleValue();
077: DateTimeStamp t2 = TimeUtil.fromJulianDate(jd);
078: assertFalse(t.toString().equals(t2.toString()));
079:
080: JulianDateStamp jds = TimeUtil.toJulianDate(t);
081: t2 = TimeUtil.fromJulianDate(jds);
082: assertEquals(t.toString(), t2.toString());
083: }
084:
085: public void testMonteCarlo() {
086: Random r = new Random();
087: for (int i = 0; i < 5000000; i++) {
088: double jd = r.nextFloat() * 3e6;
089: DateTimeStamp t = TimeUtil.fromJulianDate(jd);
090: double jd2 = TimeUtil.toJulianDate(t).doubleValue();
091: assertEquals(jd, jd2, 0.000000001);
092: }
093: }
094:
095: public void testDates() {
096: DateTimeStamp t = new DateTimeStamp();
097: GregorianCalendar gc = new GregorianCalendar();
098: for (int y = 1970; y < 2100; y++) {
099: gc.set(y, 0, 1);
100: t.year = y;
101: for (int i = 0; i < 365; i++) {
102: t.month = gc.get(Calendar.MONTH) + 1;
103: t.day = gc.get(Calendar.DAY_OF_MONTH);
104: t.hour = t.minute = 0;
105: t.second = 0.0;
106: double jd = TimeUtil.toJulianDate(t).doubleValue();
107: DateTimeStamp t2 = TimeUtil.fromJulianDate(jd);
108: assertEquals(t.toString(), t2.toString());
109: gc.add(Calendar.DAY_OF_YEAR, 1);
110: }
111: }
112: }
113:
114: public void testTimes() {
115: DateTimeStamp t = new DateTimeStamp();
116: GregorianCalendar gc = new GregorianCalendar();
117: t.year = gc.get(Calendar.YEAR);
118: gc.set(t.year, gc.get(Calendar.MONTH), gc
119: .get(Calendar.DAY_OF_MONTH), 0, 0, 0);
120: for (int day = 0; day < 1; day++) {
121: t.month = gc.get(Calendar.MONTH) + 1;
122: t.day = gc.get(Calendar.DAY_OF_MONTH);
123: for (int i = 0; i < 86400; i++) {
124: t.hour = gc.get(Calendar.HOUR_OF_DAY);
125: t.minute = gc.get(Calendar.MINUTE);
126: t.second = gc.get(Calendar.SECOND);
127: JulianDateStamp jds = TimeUtil.toJulianDate(t);
128: DateTimeStamp t2 = TimeUtil.fromJulianDate(jds);
129: assertEquals(t.toString(), t2.toString());
130: gc.add(Calendar.SECOND, 1);
131: }
132: gc.add(Calendar.DAY_OF_YEAR, 1);
133: }
134: }
135:
136: public void testDayOfYear() {
137:
138: int doy = TimeUtil.dayOfYear(2003, 1, 1);
139: assertEquals(1, doy);
140:
141: doy = TimeUtil.dayOfYear(2003, 2, 1);
142: assertEquals(32, doy);
143:
144: doy = TimeUtil.dayOfYear(2003, 12, 31);
145: assertEquals(365, doy);
146:
147: doy = TimeUtil.dayOfYear(2004, 12, 31);
148: assertEquals(366, doy);
149:
150: doy = TimeUtil.dayOfYear(2000, 12, 31);
151: assertEquals(366, doy);
152:
153: }
154:
155: public void testSetAccumulation() {
156: DateTimeStamp gts1 = new DateTimeStamp(2003, 11, 24, 21, 40,
157: 38.173);
158: DateTimeStamp gts2 = new DateTimeStamp(2003, 11, 24, 21, 40,
159: 38.173);
160: assertEquals(0, gts1.compareTo(gts2));
161: assertEquals(0, gts2.compareTo(gts1));
162:
163: for (int i = 0; i < 100; i++) {
164: JulianDateStamp jds = TimeUtil.toJulianDate(gts2);
165: gts2 = TimeUtil.fromJulianDate(jds);
166: }
167: assertEquals(0, gts1.compareTo(gts2));
168: assertEquals(0, gts2.compareTo(gts1));
169: }
170:
171: public void testSetDateAccumulation() {
172: DateTimeStamp gts1 = new DateTimeStamp(2003, 11, 24, 21, 40,
173: 38.173);
174: DateTimeStamp gts2 = new DateTimeStamp(2003, 11, 24, 21, 40,
175: 38.173);
176: assertEquals(0, gts1.compareTo(gts2));
177: assertEquals(0, gts2.compareTo(gts1));
178:
179: for (int i = 0; i < 100; i++) {
180: JulianDateStamp jds = TimeUtil.toJulianDate(2003, 11, 24,
181: gts2.hour, gts2.minute, gts2.second);
182: gts2 = TimeUtil.fromJulianDate(jds);
183: }
184: assertEquals(0, gts1.compareTo(gts2));
185: assertEquals(0, gts2.compareTo(gts1));
186: }
187:
188: }
|