code: public static int dateDiff(long t1, long t2, TimeZone tz) {
  		ZoneId zoneId = tz.toZoneId();
  		LocalDate ld1 = Instant.ofEpochMilli(t1).atZone(zoneId).toLocalDate();
  		LocalDate ld2 = Instant.ofEpochMilli(t2).atZone(zoneId).toLocalDate();
  		return (int) ChronoUnit.DAYS.between(ld2, ld1);
  	}
docs: NOTE:
  (1). JDK relies on the operating system clock for time.
  Each operating system has its own method of handling date changes such as
  leap seconds(e.g. OS will slow down the  clock to accommodate for this).
  (2). DST(Daylight Saving Time) is a legal issue, governments changed it
  over time. Some days are NOT exactly 24 hours long, it could be 23/25 hours
  long on the first or last day of daylight saving time.
  JDK can handle DST correctly.
  TODO:
  carefully written algorithm can improve the performance