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);