Show bar chart with monthly totals

pull/428/head
Alinson S. Xavier 7 years ago
parent b0820095f1
commit 6ad302b697

@ -140,11 +140,7 @@ public class ShowHabitRootView extends BaseRootView
historyCard.setHabit(habit); historyCard.setHabit(habit);
streakCard.setHabit(habit); streakCard.setHabit(habit);
frequencyCard.setHabit(habit); frequencyCard.setHabit(habit);
if(habit.isNumerical())
barCard.setHabit(habit); barCard.setHabit(habit);
else
barCard.setVisibility(GONE);
} }
public interface Controller extends HistoryCard.Controller public interface Controller extends HistoryCard.Controller

@ -93,14 +93,17 @@ public class BarCard extends HabitCard
{ {
private final Habit habit; private final Habit habit;
public RefreshTask(Habit habit) {this.habit = habit;} public RefreshTask(Habit habit)
{
this.habit = habit;
}
@Override @Override
public void doInBackground() public void doInBackground()
{ {
Timestamp today = DateUtils.getToday(); Timestamp today = DateUtils.getToday();
List<Checkmark> checkmarks = List<Checkmark> checkmarks = habit.getCheckmarks().groupBy(
habit.getCheckmarks().getByInterval(Timestamp.ZERO, today); DateUtils.TruncateField.MONTH);
chart.setCheckmarks(checkmarks); chart.setCheckmarks(checkmarks);
} }
@ -110,7 +113,10 @@ public class BarCard extends HabitCard
int color = PaletteUtils.getColor(getContext(), habit.getColor()); int color = PaletteUtils.getColor(getContext(), habit.getColor());
title.setTextColor(color); title.setTextColor(color);
chart.setColor(color); chart.setColor(color);
if(habit.isNumerical())
chart.setTarget(habit.getTargetValue()); chart.setTarget(habit.getTargetValue());
else
chart.setTarget(0);
} }
} }
} }

@ -404,4 +404,37 @@ public abstract class CheckmarkList
.toString(); .toString();
} }
} }
@NonNull
public List<Checkmark> groupBy(DateUtils.TruncateField field)
{
Repetition oldest = habit.getRepetitions().getOldest();
if(oldest == null) return new ArrayList<>();
List<Checkmark> checks = getByInterval(oldest.getTimestamp(), DateUtils.getToday());
int count = 0;
Timestamp truncatedTimestamps[] = new Timestamp[checks.size()];
int values[] = new int[checks.size()];
for (Checkmark rep : checks)
{
Timestamp tt = rep.getTimestamp().truncate(field);
if (count == 0 || !truncatedTimestamps[count - 1].equals(tt))
truncatedTimestamps[count++] = tt;
if(habit.isNumerical())
values[count - 1] += rep.getValue();
else if(rep.getValue() == Checkmark.CHECKED_EXPLICITLY)
values[count - 1] += 1000;
}
ArrayList<Checkmark> groupedCheckmarks = new ArrayList<>();
for (int i = 0; i < count; i++)
{
Checkmark rep = new Checkmark(truncatedTimestamps[i], values[i]);
groupedCheckmarks.add(rep);
}
return groupedCheckmarks;
}
} }

@ -20,6 +20,12 @@
package org.isoron.uhabits.core.models; package org.isoron.uhabits.core.models;
import org.apache.commons.lang3.builder.*; import org.apache.commons.lang3.builder.*;
import org.isoron.uhabits.core.utils.DateFormats;
import org.isoron.uhabits.core.utils.DateUtils;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import static org.isoron.uhabits.core.utils.StringUtils.defaultToStringStyle; import static org.isoron.uhabits.core.utils.StringUtils.defaultToStringStyle;

@ -20,6 +20,8 @@
package org.isoron.uhabits.core.models; package org.isoron.uhabits.core.models;
import org.apache.commons.lang3.builder.*; import org.apache.commons.lang3.builder.*;
import org.isoron.uhabits.core.utils.DateFormats;
import org.isoron.uhabits.core.utils.DateUtils;
import java.util.*; import java.util.*;
@ -138,13 +140,16 @@ public final class Timestamp
@Override @Override
public String toString() public String toString()
{ {
return new ToStringBuilder(this, defaultToStringStyle()) return DateFormats.getCSVDateFormat().format(new Date(unixTime));
.append("unixTime", unixTime)
.toString();
} }
public int getWeekday() public int getWeekday()
{ {
return toCalendar().get(DAY_OF_WEEK) % 7; return toCalendar().get(DAY_OF_WEEK) % 7;
} }
public Timestamp truncate(DateUtils.TruncateField field)
{
return new Timestamp(DateUtils.truncate(field, unixTime));
}
} }

@ -93,6 +93,42 @@ public class HabitFixtures
return habit; return habit;
} }
public Habit createLongNumericalHabit(Timestamp reference)
{
Habit habit = modelFactory.buildHabit();
habit.setType(Habit.NUMBER_HABIT);
habit.setName("Walk");
habit.setDescription("How many steps did you walk today?");
habit.setUnit("steps");
habit.setTargetType(Habit.AT_LEAST);
habit.setTargetValue(100);
habit.setColor(1);
saveIfSQLite(habit);
int times[] = {0, 5, 9, 15, 17, 21, 23, 27, 28, 35, 41, 45, 47, 53, 56, 62, 70, 73, 78,
83, 86, 94, 101, 106, 113, 114, 120, 126, 130, 133, 141, 143, 148, 151, 157, 164,
166, 171, 173, 176, 179, 183, 191, 259, 264, 268, 270, 275, 282, 284, 289, 295,
302, 306, 310, 315, 323, 325, 328, 335, 343, 349, 351, 353, 357, 359, 360, 367,
372, 376, 380, 385, 393, 400, 404, 412, 415, 418, 422, 425, 433, 437, 444, 449,
455, 460, 462, 465, 470, 471, 479, 481, 485, 489, 494, 495, 500, 501, 503, 507};
int values[] = {230, 306, 148, 281, 134, 285, 104, 158, 325, 236, 303, 210, 118, 124,
301, 201, 156, 376, 347, 367, 396, 134, 160, 381, 155, 354, 231, 134, 164, 354,
236, 398, 199, 221, 208, 397, 253, 276, 214, 341, 299, 221, 353, 250, 341, 168,
374, 205, 182, 217, 297, 321, 104, 237, 294, 110, 136, 229, 102, 271, 250, 294,
158, 319, 379, 126, 282, 155, 288, 159, 215, 247, 207, 226, 244, 158, 371, 219,
272, 228, 350, 153, 356, 279, 394, 202, 213, 214, 112, 248, 139, 245, 165, 256,
370, 187, 208, 231, 341, 312};
for (int i = 0; i < times.length; i++)
{
Timestamp timestamp = reference.minus(times[i]);
habit.getRepetitions().add(new Repetition(timestamp, values[i]));
}
return habit;
}
public Habit createShortHabit() public Habit createShortHabit()
{ {
Habit habit = modelFactory.buildHabit(); Habit habit = modelFactory.buildHabit();

@ -25,6 +25,7 @@ import org.apache.commons.io.*;
import org.isoron.uhabits.core.commands.*; import org.isoron.uhabits.core.commands.*;
import org.isoron.uhabits.core.database.*; import org.isoron.uhabits.core.database.*;
import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.core.models.*;
import org.isoron.uhabits.core.models.Timestamp;
import org.isoron.uhabits.core.models.memory.*; import org.isoron.uhabits.core.models.memory.*;
import org.isoron.uhabits.core.tasks.*; import org.isoron.uhabits.core.tasks.*;
import org.isoron.uhabits.core.test.*; import org.isoron.uhabits.core.test.*;
@ -92,20 +93,24 @@ public class BaseUnitTest
DateUtils.setFixedLocalTime(null); DateUtils.setFixedLocalTime(null);
} }
public long timestamp(int year, int month, int day) public long unixTime(int year, int month, int day)
{ {
GregorianCalendar cal = DateUtils.getStartOfTodayCalendar(); GregorianCalendar cal = DateUtils.getStartOfTodayCalendar();
cal.set(year, month, day, 0, 0, 0); cal.set(year, month, day, 0, 0, 0);
return cal.getTimeInMillis(); return cal.getTimeInMillis();
} }
public long timestamp(int year, int month, int day, int hour, int minute) public long unixTime(int year, int month, int day, int hour, int minute)
{ {
GregorianCalendar cal = DateUtils.getStartOfTodayCalendar(); GregorianCalendar cal = DateUtils.getStartOfTodayCalendar();
cal.set(year, month, day, hour, minute); cal.set(year, month, day, hour, minute);
return cal.getTimeInMillis(); return cal.getTimeInMillis();
} }
public Timestamp timestamp(int year, int month, int day) {
return new Timestamp(unixTime(year, month, day));
}
@Test @Test
public void nothing() public void nothing()
{ {

@ -28,9 +28,15 @@ import java.util.*;
import nl.jqno.equalsverifier.*; import nl.jqno.equalsverifier.*;
import static java.util.Calendar.JANUARY;
import static java.util.Calendar.JULY;
import static java.util.Calendar.JUNE;
import static org.hamcrest.MatcherAssert.*; import static org.hamcrest.MatcherAssert.*;
import static org.hamcrest.core.IsEqual.*; import static org.hamcrest.core.IsEqual.*;
import static org.isoron.uhabits.core.models.Checkmark.*; import static org.isoron.uhabits.core.models.Checkmark.*;
import static org.isoron.uhabits.core.utils.DateUtils.TruncateField.MONTH;
import static org.isoron.uhabits.core.utils.DateUtils.TruncateField.QUARTER;
import static org.isoron.uhabits.core.utils.DateUtils.TruncateField.YEAR;
public class CheckmarkListTest extends BaseUnitTest public class CheckmarkListTest extends BaseUnitTest
{ {
@ -360,13 +366,12 @@ public class CheckmarkListTest extends BaseUnitTest
Timestamp t = Timestamp.ZERO.plus(100); Timestamp t = Timestamp.ZERO.plus(100);
Checkmark checkmark = new Checkmark(t, 2); Checkmark checkmark = new Checkmark(t, 2);
assertThat(checkmark.toString(), assertThat(checkmark.toString(),
equalTo("{timestamp: {unixTime: 8640000000}, value: 2}")); equalTo("{timestamp: 1970-04-11, value: 2}"));
CheckmarkList.Interval interval = CheckmarkList.Interval interval =
new CheckmarkList.Interval(t, t.plus(1), t.plus(2)); new CheckmarkList.Interval(t, t.plus(1), t.plus(2));
assertThat(interval.toString(), equalTo( assertThat(interval.toString(), equalTo(
"{begin: {unixTime: 8640000000}, center: {unixTime: 8726400000}," + "{begin: 1970-04-11, center: 1970-04-12, end: 1970-04-13}"));
" end: {unixTime: 8812800000}}"));
} }
@Test @Test
@ -376,4 +381,30 @@ public class CheckmarkListTest extends BaseUnitTest
EqualsVerifier.forClass(Timestamp.class).verify(); EqualsVerifier.forClass(Timestamp.class).verify();
EqualsVerifier.forClass(CheckmarkList.Interval.class).verify(); EqualsVerifier.forClass(CheckmarkList.Interval.class).verify();
} }
@Test
public void testGroupBy() throws Exception
{
Habit habit = fixtures.createLongNumericalHabit(timestamp(2014, JUNE, 1));
CheckmarkList checkmarks = habit.getCheckmarks();
List<Checkmark> byMonth = checkmarks.groupBy(MONTH);
assertThat(byMonth.size(), equalTo(25)); // from 2013-01-01 to 2015-01-01
assertThat(byMonth.get(0), equalTo(new Checkmark(timestamp(2015, JANUARY, 1), 0)));
assertThat(byMonth.get(6), equalTo(new Checkmark(timestamp(2014, JULY, 1), 0)));
assertThat(byMonth.get(12), equalTo(new Checkmark(timestamp(2014, JANUARY, 1), 1706)));
assertThat(byMonth.get(18), equalTo(new Checkmark(timestamp(2013, JULY, 1), 1379)));
List<Checkmark> byQuarter = checkmarks.groupBy(QUARTER);
assertThat(byQuarter.size(), equalTo(9)); // from 2013-Q1 to 2015-Q1
assertThat(byQuarter.get(0), equalTo(new Checkmark(timestamp(2015, JANUARY, 1), 0)));
assertThat(byQuarter.get(4), equalTo(new Checkmark(timestamp(2014, JANUARY, 1), 4964)));
assertThat(byQuarter.get(8), equalTo(new Checkmark(timestamp(2013, JANUARY, 1), 4975)));
List<Checkmark> byYear = checkmarks.groupBy(YEAR);
assertThat(byYear.size(), equalTo(3)); // from 2013 to 2015
assertThat(byYear.get(0), equalTo(new Checkmark(timestamp(2015, JANUARY, 1), 0)));
assertThat(byYear.get(1), equalTo(new Checkmark(timestamp(2014, JANUARY, 1), 8227)));
assertThat(byYear.get(2), equalTo(new Checkmark(timestamp(2013, JANUARY, 1), 16172)));
}
} }

@ -189,6 +189,6 @@ public class RepetitionListTest extends BaseUnitTest
public void testToString() throws Exception public void testToString() throws Exception
{ {
Repetition rep = new Repetition(Timestamp.ZERO.plus(100), 20); Repetition rep = new Repetition(Timestamp.ZERO.plus(100), 20);
assertThat(rep.toString(), equalTo("{timestamp: {unixTime: 8640000000}, value: 20}")); assertThat(rep.toString(), equalTo("{timestamp: 1970-04-11, value: 20}"));
} }
} }

@ -74,6 +74,6 @@ public class ScoreTest extends BaseUnitTest
public void testToString() throws Exception public void testToString() throws Exception
{ {
Score score = new Score(Timestamp.ZERO.plus(100), 150.0); Score score = new Score(Timestamp.ZERO.plus(100), 150.0);
assertThat(score.toString(), equalTo( "{timestamp: {unixTime: 8640000000}, value: 150.0}")); assertThat(score.toString(), equalTo( "{timestamp: 1970-04-11, value: 150.0}"));
} }
} }

@ -124,6 +124,6 @@ public class StreakListTest extends BaseUnitTest
Timestamp time = Timestamp.ZERO.plus(100); Timestamp time = Timestamp.ZERO.plus(100);
Streak streak = new Streak(time, time.plus(10)); Streak streak = new Streak(time, time.plus(10));
assertThat(streak.toString(), equalTo( assertThat(streak.toString(), equalTo(
"{start: {unixTime: 8640000000}, end: {unixTime: 9504000000}}")); "{start: 1970-04-11, end: 1970-04-21}"));
} }
} }

@ -57,7 +57,7 @@ public class ReminderSchedulerTest extends BaseUnitTest
@Test @Test
public void testScheduleAll() public void testScheduleAll()
{ {
long now = timestamp(2015, 1, 26, 13, 0); long now = unixTime(2015, 1, 26, 13, 0);
DateUtils.setFixedLocalTime(now); DateUtils.setFixedLocalTime(now);
Habit h1 = fixtures.createEmptyHabit(); Habit h1 = fixtures.createEmptyHabit();
@ -72,9 +72,9 @@ public class ReminderSchedulerTest extends BaseUnitTest
reminderScheduler.scheduleAll(); reminderScheduler.scheduleAll();
verify(sys).scheduleShowReminder(eq(timestamp(2015, 1, 27, 12, 30)), verify(sys).scheduleShowReminder(eq(unixTime(2015, 1, 27, 12, 30)),
eq(h1), anyLong()); eq(h1), anyLong());
verify(sys).scheduleShowReminder(eq(timestamp(2015, 1, 26, 22, 30)), verify(sys).scheduleShowReminder(eq(unixTime(2015, 1, 26, 22, 30)),
eq(h2), anyLong()); eq(h2), anyLong());
Mockito.verifyNoMoreInteractions(sys); Mockito.verifyNoMoreInteractions(sys);
} }
@ -82,8 +82,8 @@ public class ReminderSchedulerTest extends BaseUnitTest
@Test @Test
public void testSchedule_atSpecificTime() public void testSchedule_atSpecificTime()
{ {
long atTime = timestamp(2015, 1, 30, 11, 30); long atTime = unixTime(2015, 1, 30, 11, 30);
long expectedCheckmarkTime = timestamp(2015, 1, 30, 0, 0); long expectedCheckmarkTime = unixTime(2015, 1, 30, 0, 0);
habit.setReminder(new Reminder(8, 30, WeekdayList.EVERY_DAY)); habit.setReminder(new Reminder(8, 30, WeekdayList.EVERY_DAY));
scheduleAndVerify(atTime, expectedCheckmarkTime, atTime); scheduleAndVerify(atTime, expectedCheckmarkTime, atTime);
@ -92,11 +92,11 @@ public class ReminderSchedulerTest extends BaseUnitTest
@Test @Test
public void testSchedule_laterToday() public void testSchedule_laterToday()
{ {
long now = timestamp(2015, 1, 26, 6, 30); long now = unixTime(2015, 1, 26, 6, 30);
DateUtils.setFixedLocalTime(now); DateUtils.setFixedLocalTime(now);
long expectedCheckmarkTime = timestamp(2015, 1, 26, 0, 0); long expectedCheckmarkTime = unixTime(2015, 1, 26, 0, 0);
long expectedReminderTime = timestamp(2015, 1, 26, 12, 30); long expectedReminderTime = unixTime(2015, 1, 26, 12, 30);
habit.setReminder(new Reminder(8, 30, WeekdayList.EVERY_DAY)); habit.setReminder(new Reminder(8, 30, WeekdayList.EVERY_DAY));
scheduleAndVerify(null, expectedCheckmarkTime, expectedReminderTime); scheduleAndVerify(null, expectedCheckmarkTime, expectedReminderTime);
@ -105,11 +105,11 @@ public class ReminderSchedulerTest extends BaseUnitTest
@Test @Test
public void testSchedule_tomorrow() public void testSchedule_tomorrow()
{ {
long now = timestamp(2015, 1, 26, 13, 0); long now = unixTime(2015, 1, 26, 13, 0);
DateUtils.setFixedLocalTime(now); DateUtils.setFixedLocalTime(now);
long expectedCheckmarkTime = timestamp(2015, 1, 27, 0, 0); long expectedCheckmarkTime = unixTime(2015, 1, 27, 0, 0);
long expectedReminderTime = timestamp(2015, 1, 27, 12, 30); long expectedReminderTime = unixTime(2015, 1, 27, 12, 30);
habit.setReminder(new Reminder(8, 30, WeekdayList.EVERY_DAY)); habit.setReminder(new Reminder(8, 30, WeekdayList.EVERY_DAY));
scheduleAndVerify(null, expectedCheckmarkTime, expectedReminderTime); scheduleAndVerify(null, expectedCheckmarkTime, expectedReminderTime);
@ -122,7 +122,7 @@ public class ReminderSchedulerTest extends BaseUnitTest
Mockito.verifyZeroInteractions(sys); Mockito.verifyZeroInteractions(sys);
} }
public long timestamp(int year, int month, int day, int hour, int minute) public long unixTime(int year, int month, int day, int hour, int minute)
{ {
Calendar cal = DateUtils.getStartOfTodayCalendar(); Calendar cal = DateUtils.getStartOfTodayCalendar();
cal.set(year, month, day, hour, minute); cal.set(year, month, day, hour, minute);

@ -45,7 +45,7 @@ public class DateUtilsTest extends BaseUnitTest
@Test @Test
public void testFormatHeaderDate() public void testFormatHeaderDate()
{ {
long timestamp = timestamp(2015, DECEMBER, 31); long timestamp = unixTime(2015, DECEMBER, 31);
GregorianCalendar date = new Timestamp(timestamp).toCalendar(); GregorianCalendar date = new Timestamp(timestamp).toCalendar();
String formatted = DateUtils.formatHeaderDate(date); String formatted = DateUtils.formatHeaderDate(date);
assertThat(formatted, equalTo("Thu\n31")); assertThat(formatted, equalTo("Thu\n31"));
@ -56,19 +56,19 @@ public class DateUtilsTest extends BaseUnitTest
{ {
DateUtils.TruncateField field = DateUtils.TruncateField.WEEK_NUMBER; DateUtils.TruncateField field = DateUtils.TruncateField.WEEK_NUMBER;
long expected = timestamp(2015, Calendar.JANUARY, 11); long expected = unixTime(2015, Calendar.JANUARY, 11);
long t0 = timestamp(2015, Calendar.JANUARY, 11); long t0 = unixTime(2015, Calendar.JANUARY, 11);
long t1 = timestamp(2015, Calendar.JANUARY, 16); long t1 = unixTime(2015, Calendar.JANUARY, 16);
long t2 = timestamp(2015, Calendar.JANUARY, 17); long t2 = unixTime(2015, Calendar.JANUARY, 17);
assertThat(DateUtils.truncate(field, t0), equalTo(expected)); assertThat(DateUtils.truncate(field, t0), equalTo(expected));
assertThat(DateUtils.truncate(field, t1), equalTo(expected)); assertThat(DateUtils.truncate(field, t1), equalTo(expected));
assertThat(DateUtils.truncate(field, t2), equalTo(expected)); assertThat(DateUtils.truncate(field, t2), equalTo(expected));
expected = timestamp(2015, Calendar.JANUARY, 18); expected = unixTime(2015, Calendar.JANUARY, 18);
t0 = timestamp(2015, Calendar.JANUARY, 18); t0 = unixTime(2015, Calendar.JANUARY, 18);
t1 = timestamp(2015, Calendar.JANUARY, 19); t1 = unixTime(2015, Calendar.JANUARY, 19);
t2 = timestamp(2015, Calendar.JANUARY, 24); t2 = unixTime(2015, Calendar.JANUARY, 24);
assertThat(DateUtils.truncate(field, t0), equalTo(expected)); assertThat(DateUtils.truncate(field, t0), equalTo(expected));
assertThat(DateUtils.truncate(field, t1), equalTo(expected)); assertThat(DateUtils.truncate(field, t1), equalTo(expected));
@ -78,10 +78,10 @@ public class DateUtilsTest extends BaseUnitTest
@Test @Test
public void testTruncate_month() public void testTruncate_month()
{ {
long expected = timestamp(2016, Calendar.JUNE, 1); long expected = unixTime(2016, Calendar.JUNE, 1);
long t0 = timestamp(2016, Calendar.JUNE, 1); long t0 = unixTime(2016, Calendar.JUNE, 1);
long t1 = timestamp(2016, Calendar.JUNE, 15); long t1 = unixTime(2016, Calendar.JUNE, 15);
long t2 = timestamp(2016, Calendar.JUNE, 20); long t2 = unixTime(2016, Calendar.JUNE, 20);
DateUtils.TruncateField field = DateUtils.TruncateField.MONTH; DateUtils.TruncateField field = DateUtils.TruncateField.MONTH;
@ -89,10 +89,10 @@ public class DateUtilsTest extends BaseUnitTest
assertThat(DateUtils.truncate(field, t1), equalTo(expected)); assertThat(DateUtils.truncate(field, t1), equalTo(expected));
assertThat(DateUtils.truncate(field, t2), equalTo(expected)); assertThat(DateUtils.truncate(field, t2), equalTo(expected));
expected = timestamp(2016, DECEMBER, 1); expected = unixTime(2016, DECEMBER, 1);
t0 = timestamp(2016, DECEMBER, 1); t0 = unixTime(2016, DECEMBER, 1);
t1 = timestamp(2016, DECEMBER, 15); t1 = unixTime(2016, DECEMBER, 15);
t2 = timestamp(2016, DECEMBER, 31); t2 = unixTime(2016, DECEMBER, 31);
assertThat(DateUtils.truncate(field, t0), equalTo(expected)); assertThat(DateUtils.truncate(field, t0), equalTo(expected));
assertThat(DateUtils.truncate(field, t1), equalTo(expected)); assertThat(DateUtils.truncate(field, t1), equalTo(expected));
@ -104,19 +104,19 @@ public class DateUtilsTest extends BaseUnitTest
{ {
DateUtils.TruncateField field = DateUtils.TruncateField.QUARTER; DateUtils.TruncateField field = DateUtils.TruncateField.QUARTER;
long expected = timestamp(2016, JANUARY, 1); long expected = unixTime(2016, JANUARY, 1);
long t0 = timestamp(2016, JANUARY, 20); long t0 = unixTime(2016, JANUARY, 20);
long t1 = timestamp(2016, FEBRUARY, 15); long t1 = unixTime(2016, FEBRUARY, 15);
long t2 = timestamp(2016, MARCH, 30); long t2 = unixTime(2016, MARCH, 30);
assertThat(DateUtils.truncate(field, t0), equalTo(expected)); assertThat(DateUtils.truncate(field, t0), equalTo(expected));
assertThat(DateUtils.truncate(field, t1), equalTo(expected)); assertThat(DateUtils.truncate(field, t1), equalTo(expected));
assertThat(DateUtils.truncate(field, t2), equalTo(expected)); assertThat(DateUtils.truncate(field, t2), equalTo(expected));
expected = timestamp(2016, APRIL, 1); expected = unixTime(2016, APRIL, 1);
t0 = timestamp(2016, APRIL, 1); t0 = unixTime(2016, APRIL, 1);
t1 = timestamp(2016, MAY, 30); t1 = unixTime(2016, MAY, 30);
t2 = timestamp(2016, JUNE, 20); t2 = unixTime(2016, JUNE, 20);
assertThat(DateUtils.truncate(field, t0), equalTo(expected)); assertThat(DateUtils.truncate(field, t0), equalTo(expected));
assertThat(DateUtils.truncate(field, t1), equalTo(expected)); assertThat(DateUtils.truncate(field, t1), equalTo(expected));
@ -128,19 +128,19 @@ public class DateUtilsTest extends BaseUnitTest
{ {
DateUtils.TruncateField field = DateUtils.TruncateField.YEAR; DateUtils.TruncateField field = DateUtils.TruncateField.YEAR;
long expected = timestamp(2016, JANUARY, 1); long expected = unixTime(2016, JANUARY, 1);
long t0 = timestamp(2016, JANUARY, 1); long t0 = unixTime(2016, JANUARY, 1);
long t1 = timestamp(2016, FEBRUARY, 25); long t1 = unixTime(2016, FEBRUARY, 25);
long t2 = timestamp(2016, DECEMBER, 31); long t2 = unixTime(2016, DECEMBER, 31);
assertThat(DateUtils.truncate(field, t0), equalTo(expected)); assertThat(DateUtils.truncate(field, t0), equalTo(expected));
assertThat(DateUtils.truncate(field, t1), equalTo(expected)); assertThat(DateUtils.truncate(field, t1), equalTo(expected));
assertThat(DateUtils.truncate(field, t2), equalTo(expected)); assertThat(DateUtils.truncate(field, t2), equalTo(expected));
expected = timestamp(2017, JANUARY, 1); expected = unixTime(2017, JANUARY, 1);
t0 = timestamp(2017, JANUARY, 1); t0 = unixTime(2017, JANUARY, 1);
t1 = timestamp(2017, MAY, 30); t1 = unixTime(2017, MAY, 30);
t2 = timestamp(2017, DECEMBER, 31); t2 = unixTime(2017, DECEMBER, 31);
assertThat(DateUtils.truncate(field, t0), equalTo(expected)); assertThat(DateUtils.truncate(field, t0), equalTo(expected));
assertThat(DateUtils.truncate(field, t1), equalTo(expected)); assertThat(DateUtils.truncate(field, t1), equalTo(expected));
@ -150,10 +150,10 @@ public class DateUtilsTest extends BaseUnitTest
@Test @Test
public void testMillisecondsUntilTomorrow() throws Exception public void testMillisecondsUntilTomorrow() throws Exception
{ {
DateUtils.setFixedLocalTime(timestamp(2017, JANUARY, 1, 2, 59)); DateUtils.setFixedLocalTime(unixTime(2017, JANUARY, 1, 2, 59));
assertThat(DateUtils.millisecondsUntilTomorrow(), equalTo(60000L)); assertThat(DateUtils.millisecondsUntilTomorrow(), equalTo(60000L));
DateUtils.setFixedLocalTime(timestamp(2017, JANUARY, 1, 23, 0)); DateUtils.setFixedLocalTime(unixTime(2017, JANUARY, 1, 23, 0));
assertThat(DateUtils.millisecondsUntilTomorrow(), equalTo(14400000L)); assertThat(DateUtils.millisecondsUntilTomorrow(), equalTo(14400000L));
} }
@ -162,81 +162,81 @@ public class DateUtilsTest extends BaseUnitTest
public void test_applyTimezone() public void test_applyTimezone()
{ {
DateUtils.setFixedTimeZone(TimeZone.getTimeZone("Australia/Sydney")); DateUtils.setFixedTimeZone(TimeZone.getTimeZone("Australia/Sydney"));
assertEquals(applyTimezone(timestamp(2017, JULY, 30, 18, 0)), (timestamp(2017, JULY, 30, 8, 0))); assertEquals(applyTimezone(unixTime(2017, JULY, 30, 18, 0)), (unixTime(2017, JULY, 30, 8, 0)));
assertEquals(applyTimezone(timestamp(2017, SEPTEMBER, 30, 0, 0)), (timestamp(2017, SEPTEMBER, 29, 14, 0))); assertEquals(applyTimezone(unixTime(2017, SEPTEMBER, 30, 0, 0)), (unixTime(2017, SEPTEMBER, 29, 14, 0)));
assertEquals(applyTimezone(timestamp(2017, SEPTEMBER, 30, 10, 0)), (timestamp(2017, SEPTEMBER, 30, 0, 0))); assertEquals(applyTimezone(unixTime(2017, SEPTEMBER, 30, 10, 0)), (unixTime(2017, SEPTEMBER, 30, 0, 0)));
assertEquals(applyTimezone(timestamp(2017, SEPTEMBER, 30, 11, 0)), (timestamp(2017, SEPTEMBER, 30, 1, 0))); assertEquals(applyTimezone(unixTime(2017, SEPTEMBER, 30, 11, 0)), (unixTime(2017, SEPTEMBER, 30, 1, 0)));
assertEquals(applyTimezone(timestamp(2017, SEPTEMBER, 30, 12, 0)), (timestamp(2017, SEPTEMBER, 30, 2, 0))); assertEquals(applyTimezone(unixTime(2017, SEPTEMBER, 30, 12, 0)), (unixTime(2017, SEPTEMBER, 30, 2, 0)));
assertEquals(applyTimezone(timestamp(2017, SEPTEMBER, 30, 13, 0)), (timestamp(2017, SEPTEMBER, 30, 3, 0))); assertEquals(applyTimezone(unixTime(2017, SEPTEMBER, 30, 13, 0)), (unixTime(2017, SEPTEMBER, 30, 3, 0)));
assertEquals(applyTimezone(timestamp(2017, SEPTEMBER, 30, 22, 0)), (timestamp(2017, SEPTEMBER, 30, 12, 0))); assertEquals(applyTimezone(unixTime(2017, SEPTEMBER, 30, 22, 0)), (unixTime(2017, SEPTEMBER, 30, 12, 0)));
assertEquals(applyTimezone(timestamp(2017, SEPTEMBER, 30, 23, 0)), (timestamp(2017, SEPTEMBER, 30, 13, 0))); assertEquals(applyTimezone(unixTime(2017, SEPTEMBER, 30, 23, 0)), (unixTime(2017, SEPTEMBER, 30, 13, 0)));
assertEquals(applyTimezone(timestamp(2017, OCTOBER, 1, 0, 0)), (timestamp(2017, SEPTEMBER, 30, 14, 0))); assertEquals(applyTimezone(unixTime(2017, OCTOBER, 1, 0, 0)), (unixTime(2017, SEPTEMBER, 30, 14, 0)));
assertEquals(applyTimezone(timestamp(2017, OCTOBER, 1, 1, 0)), (timestamp(2017, SEPTEMBER, 30, 15, 0))); assertEquals(applyTimezone(unixTime(2017, OCTOBER, 1, 1, 0)), (unixTime(2017, SEPTEMBER, 30, 15, 0)));
assertEquals(applyTimezone(timestamp(2017, OCTOBER, 1, 1, 59)), (timestamp(2017, SEPTEMBER, 30, 15, 59))); assertEquals(applyTimezone(unixTime(2017, OCTOBER, 1, 1, 59)), (unixTime(2017, SEPTEMBER, 30, 15, 59)));
// DST begins // DST begins
assertEquals(applyTimezone(timestamp(2017, OCTOBER, 1, 3, 0)), (timestamp(2017, SEPTEMBER, 30, 16, 0))); assertEquals(applyTimezone(unixTime(2017, OCTOBER, 1, 3, 0)), (unixTime(2017, SEPTEMBER, 30, 16, 0)));
assertEquals(applyTimezone(timestamp(2017, OCTOBER, 1, 4, 0)), (timestamp(2017, SEPTEMBER, 30, 17, 0))); assertEquals(applyTimezone(unixTime(2017, OCTOBER, 1, 4, 0)), (unixTime(2017, SEPTEMBER, 30, 17, 0)));
assertEquals(applyTimezone(timestamp(2017, OCTOBER, 1, 5, 0)), (timestamp(2017, SEPTEMBER, 30, 18, 0))); assertEquals(applyTimezone(unixTime(2017, OCTOBER, 1, 5, 0)), (unixTime(2017, SEPTEMBER, 30, 18, 0)));
assertEquals(applyTimezone(timestamp(2017, OCTOBER, 1, 11, 0)), (timestamp(2017, OCTOBER, 1, 0, 0))); assertEquals(applyTimezone(unixTime(2017, OCTOBER, 1, 11, 0)), (unixTime(2017, OCTOBER, 1, 0, 0)));
assertEquals(applyTimezone(timestamp(2017, OCTOBER, 1, 12, 0)), (timestamp(2017, OCTOBER, 1, 1, 0))); assertEquals(applyTimezone(unixTime(2017, OCTOBER, 1, 12, 0)), (unixTime(2017, OCTOBER, 1, 1, 0)));
assertEquals(applyTimezone(timestamp(2017, OCTOBER, 1, 13, 0)), (timestamp(2017, OCTOBER, 1, 2, 0))); assertEquals(applyTimezone(unixTime(2017, OCTOBER, 1, 13, 0)), (unixTime(2017, OCTOBER, 1, 2, 0)));
assertEquals(applyTimezone(timestamp(2017, OCTOBER, 1, 14, 0)), (timestamp(2017, OCTOBER, 1, 3, 0))); assertEquals(applyTimezone(unixTime(2017, OCTOBER, 1, 14, 0)), (unixTime(2017, OCTOBER, 1, 3, 0)));
assertEquals(applyTimezone(timestamp(2017, OCTOBER, 1, 15, 0)), (timestamp(2017, OCTOBER, 1, 4, 0))); assertEquals(applyTimezone(unixTime(2017, OCTOBER, 1, 15, 0)), (unixTime(2017, OCTOBER, 1, 4, 0)));
assertEquals(applyTimezone(timestamp(2017, OCTOBER, 1, 19, 0)), (timestamp(2017, OCTOBER, 1, 8, 0))); assertEquals(applyTimezone(unixTime(2017, OCTOBER, 1, 19, 0)), (unixTime(2017, OCTOBER, 1, 8, 0)));
assertEquals(applyTimezone(timestamp(2017, OCTOBER, 2, 19, 0)), (timestamp(2017, OCTOBER, 2, 8, 0))); assertEquals(applyTimezone(unixTime(2017, OCTOBER, 2, 19, 0)), (unixTime(2017, OCTOBER, 2, 8, 0)));
assertEquals(applyTimezone(timestamp(2017, NOVEMBER, 30, 19, 0)), (timestamp(2017, NOVEMBER, 30, 8, 0))); assertEquals(applyTimezone(unixTime(2017, NOVEMBER, 30, 19, 0)), (unixTime(2017, NOVEMBER, 30, 8, 0)));
assertEquals(applyTimezone(timestamp(2018, MARCH, 31, 0, 0)), (timestamp(2018, MARCH, 30, 13, 0))); assertEquals(applyTimezone(unixTime(2018, MARCH, 31, 0, 0)), (unixTime(2018, MARCH, 30, 13, 0)));
assertEquals(applyTimezone(timestamp(2018, MARCH, 31, 12, 0)), (timestamp(2018, MARCH, 31, 1, 0))); assertEquals(applyTimezone(unixTime(2018, MARCH, 31, 12, 0)), (unixTime(2018, MARCH, 31, 1, 0)));
assertEquals(applyTimezone(timestamp(2018, MARCH, 31, 18, 0)), (timestamp(2018, MARCH, 31, 7, 0))); assertEquals(applyTimezone(unixTime(2018, MARCH, 31, 18, 0)), (unixTime(2018, MARCH, 31, 7, 0)));
assertEquals(applyTimezone(timestamp(2018, APRIL, 1, 0, 0)), (timestamp(2018, MARCH, 31, 13, 0))); assertEquals(applyTimezone(unixTime(2018, APRIL, 1, 0, 0)), (unixTime(2018, MARCH, 31, 13, 0)));
assertEquals(applyTimezone(timestamp(2018, APRIL, 1, 1, 0)), (timestamp(2018, MARCH, 31, 14, 0))); assertEquals(applyTimezone(unixTime(2018, APRIL, 1, 1, 0)), (unixTime(2018, MARCH, 31, 14, 0)));
assertEquals(applyTimezone(timestamp(2018, APRIL, 1, 1, 59)), (timestamp(2018, MARCH, 31, 14, 59))); assertEquals(applyTimezone(unixTime(2018, APRIL, 1, 1, 59)), (unixTime(2018, MARCH, 31, 14, 59)));
// DST ends // DST ends
assertEquals(applyTimezone(timestamp(2018, APRIL, 1, 2, 0)), (timestamp(2018, MARCH, 31, 16, 0))); assertEquals(applyTimezone(unixTime(2018, APRIL, 1, 2, 0)), (unixTime(2018, MARCH, 31, 16, 0)));
assertEquals(applyTimezone(timestamp(2018, APRIL, 1, 3, 0)), (timestamp(2018, MARCH, 31, 17, 0))); assertEquals(applyTimezone(unixTime(2018, APRIL, 1, 3, 0)), (unixTime(2018, MARCH, 31, 17, 0)));
assertEquals(applyTimezone(timestamp(2018, APRIL, 1, 4, 0)), (timestamp(2018, MARCH, 31, 18, 0))); assertEquals(applyTimezone(unixTime(2018, APRIL, 1, 4, 0)), (unixTime(2018, MARCH, 31, 18, 0)));
assertEquals(applyTimezone(timestamp(2018, APRIL, 1, 10, 0)), (timestamp(2018, APRIL, 1, 0, 0))); assertEquals(applyTimezone(unixTime(2018, APRIL, 1, 10, 0)), (unixTime(2018, APRIL, 1, 0, 0)));
assertEquals(applyTimezone(timestamp(2018, APRIL, 1, 18, 0)), (timestamp(2018, APRIL, 1, 8, 0))); assertEquals(applyTimezone(unixTime(2018, APRIL, 1, 18, 0)), (unixTime(2018, APRIL, 1, 8, 0)));
} }
@Test @Test
public void test_removeTimezone() public void test_removeTimezone()
{ {
DateUtils.setFixedTimeZone(TimeZone.getTimeZone("Australia/Sydney")); DateUtils.setFixedTimeZone(TimeZone.getTimeZone("Australia/Sydney"));
assertEquals(removeTimezone(timestamp(2017, JULY, 30, 8, 0)), (timestamp(2017, JULY, 30, 18, 0))); assertEquals(removeTimezone(unixTime(2017, JULY, 30, 8, 0)), (unixTime(2017, JULY, 30, 18, 0)));
assertEquals(removeTimezone(timestamp(2017, SEPTEMBER, 29, 14, 0)), (timestamp(2017, SEPTEMBER, 30, 0, 0))); assertEquals(removeTimezone(unixTime(2017, SEPTEMBER, 29, 14, 0)), (unixTime(2017, SEPTEMBER, 30, 0, 0)));
assertEquals(removeTimezone(timestamp(2017, SEPTEMBER, 30, 0, 0)), (timestamp(2017, SEPTEMBER, 30, 10, 0))); assertEquals(removeTimezone(unixTime(2017, SEPTEMBER, 30, 0, 0)), (unixTime(2017, SEPTEMBER, 30, 10, 0)));
assertEquals(removeTimezone(timestamp(2017, SEPTEMBER, 30, 1, 0)), (timestamp(2017, SEPTEMBER, 30, 11, 0))); assertEquals(removeTimezone(unixTime(2017, SEPTEMBER, 30, 1, 0)), (unixTime(2017, SEPTEMBER, 30, 11, 0)));
assertEquals(removeTimezone(timestamp(2017, SEPTEMBER, 30, 2, 0)), (timestamp(2017, SEPTEMBER, 30, 12, 0))); assertEquals(removeTimezone(unixTime(2017, SEPTEMBER, 30, 2, 0)), (unixTime(2017, SEPTEMBER, 30, 12, 0)));
assertEquals(removeTimezone(timestamp(2017, SEPTEMBER, 30, 3, 0)), (timestamp(2017, SEPTEMBER, 30, 13, 0))); assertEquals(removeTimezone(unixTime(2017, SEPTEMBER, 30, 3, 0)), (unixTime(2017, SEPTEMBER, 30, 13, 0)));
assertEquals(removeTimezone(timestamp(2017, SEPTEMBER, 30, 12, 0)), (timestamp(2017, SEPTEMBER, 30, 22, 0))); assertEquals(removeTimezone(unixTime(2017, SEPTEMBER, 30, 12, 0)), (unixTime(2017, SEPTEMBER, 30, 22, 0)));
assertEquals(removeTimezone(timestamp(2017, SEPTEMBER, 30, 13, 0)), (timestamp(2017, SEPTEMBER, 30, 23, 0))); assertEquals(removeTimezone(unixTime(2017, SEPTEMBER, 30, 13, 0)), (unixTime(2017, SEPTEMBER, 30, 23, 0)));
assertEquals(removeTimezone(timestamp(2017, SEPTEMBER, 30, 14, 0)), (timestamp(2017, OCTOBER, 1, 0, 0))); assertEquals(removeTimezone(unixTime(2017, SEPTEMBER, 30, 14, 0)), (unixTime(2017, OCTOBER, 1, 0, 0)));
assertEquals(removeTimezone(timestamp(2017, SEPTEMBER, 30, 15, 0)), (timestamp(2017, OCTOBER, 1, 1, 0))); assertEquals(removeTimezone(unixTime(2017, SEPTEMBER, 30, 15, 0)), (unixTime(2017, OCTOBER, 1, 1, 0)));
assertEquals(removeTimezone(timestamp(2017, SEPTEMBER, 30, 15, 59)), (timestamp(2017, OCTOBER, 1, 1, 59))); assertEquals(removeTimezone(unixTime(2017, SEPTEMBER, 30, 15, 59)), (unixTime(2017, OCTOBER, 1, 1, 59)));
// DST begins // DST begins
assertEquals(removeTimezone(timestamp(2017, SEPTEMBER, 30, 16, 0)), (timestamp(2017, OCTOBER, 1, 3, 0))); assertEquals(removeTimezone(unixTime(2017, SEPTEMBER, 30, 16, 0)), (unixTime(2017, OCTOBER, 1, 3, 0)));
assertEquals(removeTimezone(timestamp(2017, SEPTEMBER, 30, 17, 0)), (timestamp(2017, OCTOBER, 1, 4, 0))); assertEquals(removeTimezone(unixTime(2017, SEPTEMBER, 30, 17, 0)), (unixTime(2017, OCTOBER, 1, 4, 0)));
assertEquals(removeTimezone(timestamp(2017, SEPTEMBER, 30, 18, 0)), (timestamp(2017, OCTOBER, 1, 5, 0))); assertEquals(removeTimezone(unixTime(2017, SEPTEMBER, 30, 18, 0)), (unixTime(2017, OCTOBER, 1, 5, 0)));
assertEquals(removeTimezone(timestamp(2017, OCTOBER, 1, 0, 0)), (timestamp(2017, OCTOBER, 1, 11, 0))); assertEquals(removeTimezone(unixTime(2017, OCTOBER, 1, 0, 0)), (unixTime(2017, OCTOBER, 1, 11, 0)));
assertEquals(removeTimezone(timestamp(2017, OCTOBER, 1, 1, 0)), (timestamp(2017, OCTOBER, 1, 12, 0))); assertEquals(removeTimezone(unixTime(2017, OCTOBER, 1, 1, 0)), (unixTime(2017, OCTOBER, 1, 12, 0)));
assertEquals(removeTimezone(timestamp(2017, OCTOBER, 1, 2, 0)), (timestamp(2017, OCTOBER, 1, 13, 0))); assertEquals(removeTimezone(unixTime(2017, OCTOBER, 1, 2, 0)), (unixTime(2017, OCTOBER, 1, 13, 0)));
assertEquals(removeTimezone(timestamp(2017, OCTOBER, 1, 3, 0)), (timestamp(2017, OCTOBER, 1, 14, 0))); assertEquals(removeTimezone(unixTime(2017, OCTOBER, 1, 3, 0)), (unixTime(2017, OCTOBER, 1, 14, 0)));
assertEquals(removeTimezone(timestamp(2017, OCTOBER, 1, 4, 0)), (timestamp(2017, OCTOBER, 1, 15, 0))); assertEquals(removeTimezone(unixTime(2017, OCTOBER, 1, 4, 0)), (unixTime(2017, OCTOBER, 1, 15, 0)));
assertEquals(removeTimezone(timestamp(2017, OCTOBER, 1, 8, 0)), (timestamp(2017, OCTOBER, 1, 19, 0))); assertEquals(removeTimezone(unixTime(2017, OCTOBER, 1, 8, 0)), (unixTime(2017, OCTOBER, 1, 19, 0)));
assertEquals(removeTimezone(timestamp(2017, OCTOBER, 2, 8, 0)), (timestamp(2017, OCTOBER, 2, 19, 0))); assertEquals(removeTimezone(unixTime(2017, OCTOBER, 2, 8, 0)), (unixTime(2017, OCTOBER, 2, 19, 0)));
assertEquals(removeTimezone(timestamp(2017, NOVEMBER, 30, 8, 0)), (timestamp(2017, NOVEMBER, 30, 19, 0))); assertEquals(removeTimezone(unixTime(2017, NOVEMBER, 30, 8, 0)), (unixTime(2017, NOVEMBER, 30, 19, 0)));
assertEquals(removeTimezone(timestamp(2018, MARCH, 30, 13, 0)), (timestamp(2018, MARCH, 31, 0, 0))); assertEquals(removeTimezone(unixTime(2018, MARCH, 30, 13, 0)), (unixTime(2018, MARCH, 31, 0, 0)));
assertEquals(removeTimezone(timestamp(2018, MARCH, 31, 1, 0)), (timestamp(2018, MARCH, 31, 12, 0))); assertEquals(removeTimezone(unixTime(2018, MARCH, 31, 1, 0)), (unixTime(2018, MARCH, 31, 12, 0)));
assertEquals(removeTimezone(timestamp(2018, MARCH, 31, 7, 0)), (timestamp(2018, MARCH, 31, 18, 0))); assertEquals(removeTimezone(unixTime(2018, MARCH, 31, 7, 0)), (unixTime(2018, MARCH, 31, 18, 0)));
assertEquals(removeTimezone(timestamp(2018, MARCH, 31, 13, 0)), (timestamp(2018, APRIL, 1, 0, 0))); assertEquals(removeTimezone(unixTime(2018, MARCH, 31, 13, 0)), (unixTime(2018, APRIL, 1, 0, 0)));
assertEquals(removeTimezone(timestamp(2018, MARCH, 31, 14, 0)), (timestamp(2018, APRIL, 1, 1, 0))); assertEquals(removeTimezone(unixTime(2018, MARCH, 31, 14, 0)), (unixTime(2018, APRIL, 1, 1, 0)));
assertEquals(removeTimezone(timestamp(2018, MARCH, 31, 14, 59)), (timestamp(2018, APRIL, 1, 1, 59))); assertEquals(removeTimezone(unixTime(2018, MARCH, 31, 14, 59)), (unixTime(2018, APRIL, 1, 1, 59)));
// DST ends // DST ends
assertEquals(removeTimezone(timestamp(2018, MARCH, 31, 16, 0)), (timestamp(2018, APRIL, 1, 2, 0))); assertEquals(removeTimezone(unixTime(2018, MARCH, 31, 16, 0)), (unixTime(2018, APRIL, 1, 2, 0)));
assertEquals(removeTimezone(timestamp(2018, MARCH, 31, 17, 0)), (timestamp(2018, APRIL, 1, 3, 0))); assertEquals(removeTimezone(unixTime(2018, MARCH, 31, 17, 0)), (unixTime(2018, APRIL, 1, 3, 0)));
assertEquals(removeTimezone(timestamp(2018, MARCH, 31, 18, 0)), (timestamp(2018, APRIL, 1, 4, 0))); assertEquals(removeTimezone(unixTime(2018, MARCH, 31, 18, 0)), (unixTime(2018, APRIL, 1, 4, 0)));
assertEquals(removeTimezone(timestamp(2018, APRIL, 1, 0, 0)), (timestamp(2018, APRIL, 1, 10, 0))); assertEquals(removeTimezone(unixTime(2018, APRIL, 1, 0, 0)), (unixTime(2018, APRIL, 1, 10, 0)));
assertEquals(removeTimezone(timestamp(2018, APRIL, 1, 8, 0)), (timestamp(2018, APRIL, 1, 18, 0))); assertEquals(removeTimezone(unixTime(2018, APRIL, 1, 8, 0)), (unixTime(2018, APRIL, 1, 18, 0)));
} }
} }

Loading…
Cancel
Save