COMPARE - MX

Java on dates

JDate: Date/time

Don't forget to check the documentation for the JDate Class

Computing the difference between two dates, in seconds

// java method "Diff_2date_second"

JDate jDate1=_doJava.getNewJDate();
JDate jDate2=_doJava.getNewJDate();
if (!jDate1.set(_str1)) return "";
if (!jDate2.set(_str2)) return "";

return (jDate1.getTimeInMillis()-jDate2.getTimeInMillis())/1000.0;

Computing the difference between two lines, in minutes

if (_doJava.get("_str1",-1) == null)   return "";
JDate jDate1=_doJava.getNewJDate();
JDate jDate2=_doJava.getNewJDate();
if (!jDate1.set(_str1)) return "";
if (!jDate2.set(_doJava.get("_str1",-1))) return "";

return ((jDate1.getTimeInMillis()-jDate2.getTimeInMillis())/JDatePeriod.ONE_MINUTE);

Computing the difference between two dates, in hours, with two decimal places

JDate jDate1=_doJava.getNewJDate();
JDate jDate2=_doJava.getNewJDate();
if (!jDate1.set(_str1)) return "";
if (!jDate2.set(_str2)) return "";
double d=jDate1.getTimeInMillis()-jDate2.getTimeInMillis();
// Converts the number to two decimal places
return String.format("%.2f", d/JDatePeriod.ONE_HOUR);

The "%.2f" in the last expression insures that the result is formatted to two decimal places, without using scientific notation (4.2e-4). If you want four decimals, use "%.4f", etc.

Checking whether a date is in the future

JDate jDate=_doJava.getNewJDate();
if (!jDate.set(_str1))
  return "";

if (jDate.getTimeInMillis() > System.currentTimeMillis())
  return DoJava.DO_NOT_ADD_OPERATION_IN;
else
  return "Date is in the past";

Comparing dates before a fixed date

JDate jDate1=_doJava.getNewJDate();
if (!jDate1.set(_str1))
  return "";

JDate jDate2=_doJava.getNewJDate("20100730_000000");

if (jDate1.getTimeInMillis()<jDate2.getTimeInMillis())
return _str2;
return _str3;

// or if you don't want to treat data before the fixed date :
//and this operation need to be "necessary in"

JDate jDate1=_doJava.getNewJDate();
if (!jDate1.set(_str1))
  return "";

JDate jDate2=_doJava.getNewJDate("20100730_000000");

if (jDate1.getTimeInMillis()<jDate2.getTimeInMillis())
return DoJava.DO_NOT_ADD_OPERATION_IN;
return "OK";

Comparing a date to a start date and an end date (and retrieving a spool number _str4 for example)

JDate jActualDate=_doJava.getNewJDate();
JDate jStartDate=_doJava.getNewJDate();
JDate jEndDate=_doJava.getNewJDate();

if (!jActualDate.set(_str1))
  return "";
if (!jStartDate.set(_str2))
  return "";
if (!jEndDate.set(_str3))
  return "";

if (jActualDate.getTimeInMillis()>=jStartDate.getTimeInMillis() && jActualDate.getTimeInMillis()<=jEndDate.getTimeInMillis())
  return _str4;
else
  return "";

Computing the difference between the creation and modification date of a row

long lDateNew=Str.ToLong(_str1);
long lDateModify=Str.ToLong(_str2);
return (lDateNew-lDateModify)/JDatePeriod.ONE_DAY;

Comparing a date to several others and returning the closest one

_str1 = "mise en cloche" date
_str2 = F1 oven stopping date
_str3 = F2 oven stopping date
// We're looking for which oven stopping date between oven 1 and oven 2 is closest to the "mise en cloche" date, knowing that the "mise en cloche" happens after the oven stopping.

long dater=0;
long datecloche=Str.ToLong(Str.Remove(_str1, "_"));
long dateF1=Str.ToLong(Str.Remove(_str2, "_"));
long dateF2=Str.ToLong(Str.Remove(_str3, "_"));

long resultat=1200000000; // Unused
long diff1=datecloche-dateF1;
long diff2=datecloche-dateF2;

if(diff1<res) {res=diff1; dater=dateF1;}
if(diff2<res) {res=diff2; dater=dateF2;}

String datestr=String.valueOf(dater);
if (datestr.length()<14) return "";
   return datestr.substring(0,8)+"_"+datestr.substring(8,14);

Comparing a date with Now

// Result in Days
JDate jDate1=_doJava.getNewJDate();

JDate jDatenow=_doJava.getNewJDate();
jDatenow.setTimeInMillis(System.currentTimeMillis());
if (!jDate1.set(_str1)) return "";

double d = (jDatenow.getTimeInMillis()-jDate1.getTimeInMillis())/1000.0/60.0/1440.0;
return String.format("%.2f", d);

Was this article helpful?

Powered by Zendesk