====== MS Excel date/time ======
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)));