if (0 > jtime) throw new IllegalArgumentException("Negative Java time: " + jtime); final GregorianCalendar cal = getThreadLocalCalendar(); cal.setTimeInMillis(roundUp(jtime) ? jtime + 1999 : jtime); long dtime = cal.get(Calendar.YEAR) - 1980; if (0 > dtime) return MIN_DOS_TIME;
@Test public void testRoundTripTimeConversion() { // Must start with DOS time due to lesser time granularity. long dosTime = ZipEntry.MIN_DOS_TIME; assertEquals(dosTime, DateTimeConverter.JAR.toDosTime(DateTimeConverter.JAR.toJavaTime(dosTime))); dosTime = DateTimeConverter.JAR.toDosTime(System.currentTimeMillis()); assertEquals(dosTime, DateTimeConverter.JAR.toDosTime(DateTimeConverter.JAR.toJavaTime(dosTime))); }
public final long getTime() { if (!isInit(DTIME)) return UNKNOWN; return getDateTimeConverter().toJavaTime(dtime & UInt.MAX_VALUE); }
else if (MAX_DOS_TIME < dtime) dtime = MAX_DOS_TIME; final int time = (int) dtime; final GregorianCalendar cal = getThreadLocalCalendar(); cal.set(Calendar.ERA, GregorianCalendar.AD); cal.set(Calendar.YEAR, 1980 + ((time >> 25) & 0x7f));
public final void setTime(final long jtime) { final boolean known = UNKNOWN != jtime; if (known) { this.dtime = (int) getDateTimeConverter().toDosTime(jtime); } else { this.dtime = 0; } setInit(DTIME, known); }
@Test public final void testToJavaTime() { assertThat(instance.toJavaTime(Long.MIN_VALUE), is(minJavaTime)); assertThat(instance.toJavaTime(MIN_DOS_TIME - 1), is(minJavaTime)); assertThat(instance.toJavaTime(MIN_DOS_TIME), is(minJavaTime)); assertThat(instance.toJavaTime(MAX_DOS_TIME), is(maxJavaTime)); assertThat(instance.toJavaTime(MAX_DOS_TIME + 1), is(maxJavaTime)); assertThat(instance.toJavaTime(Long.MAX_VALUE), is(maxJavaTime)); }
@Before public void setUp() { instance = getInstance(); GregorianCalendar calendar = instance.getThreadLocalCalendar(); calendar.set(Calendar.ERA, GregorianCalendar.AD); calendar.set(Calendar.MILLISECOND, 0); calendar.set(1980, Calendar.JANUARY, 1, 0, 0, 0); minJavaTime = calendar.getTimeInMillis(); calendar.set(2107, Calendar.DECEMBER, 31, 23, 59, 58); // 58 seconds!!! maxJavaTime = calendar.getTimeInMillis(); }
@Test public final void testToDosTime() { try { instance.toDosTime(Long.MIN_VALUE); fail(); } catch (IllegalArgumentException expected) { } try { instance.toDosTime(-1); fail(); } catch (IllegalArgumentException expected) { } assertThat(instance.toDosTime(0), is(MIN_DOS_TIME)); assertThat(instance.toDosTime(minJavaTime - 1), is(MIN_DOS_TIME)); assertThat(instance.toDosTime(minJavaTime), is(MIN_DOS_TIME)); assertThat(instance.toDosTime(maxJavaTime), is(MAX_DOS_TIME)); assertThat(instance.toDosTime(maxJavaTime + 1), is(MAX_DOS_TIME)); assertThat(instance.toDosTime(Long.MAX_VALUE), is(MAX_DOS_TIME)); }
@Test public void testGranularity() { final long jTime = System.currentTimeMillis(); final long dTime = instance.toDosTime(jTime); assertThat(instance.toDosTime(jTime - 2000), not(is(dTime))); assertThat(instance.toDosTime(jTime + 2000), not(is(dTime))); assertThat(instance.toJavaTime(instance.toDosTime(jTime - 2000)), not(is(jTime))); assertThat(instance.toJavaTime(instance.toDosTime(jTime + 2000)), not(is(jTime))); } }
@Test public void testTime() { try { entry.setTime(Long.MIN_VALUE); fail(); } catch (IllegalArgumentException expected) { } try { entry.setTime(UNKNOWN - 1); fail(); } catch (IllegalArgumentException expected) { } assertEquals(UNKNOWN, entry.getTime()); entry.setTime(0); assertEquals(entry.getTime(), DateTimeConverter.JAR.toJavaTime(MIN_DOS_TIME)); entry.setTime(Long.MAX_VALUE); assertEquals(entry.getTime(), DateTimeConverter.JAR.toJavaTime(MAX_DOS_TIME)); entry.setTime(UNKNOWN); assertEquals(UNKNOWN, entry.getTime()); }
@Test public final void testGetThreadLocalCalendar() throws Exception { final GregorianCalendar ref = instance.getThreadLocalCalendar(); ConcurrencyUtils.runConcurrent(2, new TaskFactory() { @Override public Callable<?> newTask(int threadNum) { return new Callable<Void>() { @Override public Void call() { assertThat(instance.getThreadLocalCalendar(), is(not(sameInstance(ref)))); return null; } }; } }).join(); assertThat(instance.getThreadLocalCalendar(), is(sameInstance(ref))); }
@Test public void testRoundTripConversion() { for (long dTime : new long[] { MIN_DOS_TIME, MAX_DOS_TIME, }) { assertThat(instance.toDosTime(instance.toJavaTime(dTime)), is(dTime)); } }