About the date/time format in Excel: http://www.cpearson.com/excel/datetime.htm
code based on: http://poi.apache.org,
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFDateUtil.java?view=markup
useful ⇒ excel
This is a kind of pseudo code without types and language specific stuff. YEAR, DAY_OF_YEAR, HOUR, MINUTE, SECOND represents the date you want to encode with DAY_OF_YEAR being the number of days since the beginning of the year
leapDays = (YEAR - 1) / 4 - (YEAR - 1) / 100 + (YEAR - 1) / 400 - 460; date = 365 * (YEAR - 1900) + leapDays + DAY_OF_YEAR + 1; time = (SECOND + (MINUTE * 60) + (HOUR * 3600)) / (24 * 60 * 60); excelDate = date + time;
and the same in Java:
Calendar cal = new GregorianCalendar(year, month, day[, hour, minute, second]); // month is zero based! int year = dt.get(Calendar.YEAR) - 1; int leapDays = year / 4 - year / 100 + year / 400 - 460; int date = 365 * (dt.get(Calendar.YEAR) - 1900) + leapDays + dt.get(Calendar.DAY_OF_YEAR) + 1; double time = (double)(dt.get(Calendar.SECOND) + (dt.get(Calendar.MINUTE) * 60) + (dt.get(Calendar.HOUR_OF_DAY) * 3600)) / 86400d; double excelDate = date + time;
excel ⇒ useful (Java only)
double excelDate; Calendar cal = new GregorianCalendar(1900, Calendar.JANUARY, 0); cal.add(Calendar.DATE, ((int)excelDate) - 1); cal.add(Calendar.SECOND, (int)(86400 * (dt - (int)excelDate)));