As Karl-Heinz pointed out, that is the internal Excel date format.
It's a floating point number representing the number of fractional
days since the beginning of the 20th century.  The orginal authors of
Excel were unaware that 1900 wasn't a leap year, so the dates are out
by one day, starting at 00:00 on Dec 31 1899.   Excel uses local time,
not UTC.  So to convert this to a java time do the following:
- adjust for the different start day Jan 1, 1970 is excel date 25,569
- multiply by the number of milliseconds in a day 8,6400,000
- convert to a Date using java.util.date.Date(long date)
- use the Calendar class to adjust timezone 
- use java.text.SimpleDateFormat to convert it to text.

/peter


On 7/15/05, Ric Dargusch <[EMAIL PROTECTED]> wrote:
> Hi Jaypee-
> 
> I've played with this Excel stuff a bit...
> I am enclosing a method that will convert the "internal
> representation (e.g. 38472) to the date format you want
> (e.g. 5/1/2005).
> 
> Please send me a note and let me know if this works for you
> -Ric
> 
> ([EMAIL PROTECTED])
> 
> 
> ==============================
> public static final int[] days_b4_month =  {    // Don't forget to check for
> leap year!
>       0,
>       31,
>       31+28,
>       31+28+31,
>       31+28+31+30,
>       31+28+31+30+31,
>       31+28+31+30+31+30,
>       31+28+31+30+31+30+31,
>       31+28+31+30+31+30+31+31,
>       31+28+31+30+31+30+31+31+30,
>       31+28+31+30+31+30+31+31+30+31,
>       31+28+31+30+31+30+31+31+30+31+30,
>       31+28+31+30+31+30+31+31+30+31+30+31
>         };
> 
>   public static String convert(double excelDate)
>   {
>     boolean leap_day = false;
>     int month = 0;
>     int day = 0;
>     int date = (int) excelDate;
>     int yr = (int) (excelDate / 365.25);
>     int year = yr + 1900;
>     int yrDay = (int) excelDate - (yr * 365 + (int) (yr / 4));
>     if ((yr % 4) == 0)      // Leap years.  (N.B. this algorithm will be
> inaccurate after 2099!)
>     {
>       if (yrDay == 59) // It's Feb 29!  -  Special case
>         leap_day = true;
>       else if (yrDay < days_b4_month[2])
>         yrDay++; // Compensate for leap day.
>     }
>     if (leap_day)
>     {
>       month = 2;
>       day = 29;
>     }
>     else
>     {
>       month = 0;       // start in January.
>       while (days_b4_month[month] < yrDay)
>         month++;
>       day = yrDay - days_b4_month[month-1];
>     }
>     String ret = new String(month + "/" + day + "/" + year);
>     return ret;
>   }
> 
> 
> 
> -----Original Message-----
> From: KHZ (SAW) [mailto:[EMAIL PROTECTED]
> Sent: Friday, July 15, 2005 4:17 AM
> To: 'POI Users List'
> Subject: AW: How to read data as it appears in the excel sheet.........
> 
> Hi Jaypee.
> 
> The internal representation is 38473. This is the sequence number of the
> day starting at 1.1.1900 (+/-1). Look at threads having "date" in the
> subject. There such things are intensively discussed.
> 
> So you want to achieve the same external representation and thus need
> data formatting which is "normal" Java. So look at the J2SE
> documentation of SUN - most probably in the classes java.util.Date or
> String or similar classes.
> 
> The setting and getting data formats of a cell in POI is just used for
> forcing Excel to show the data later as wanted.
> 
> Regards,        Karl-Heinz.
> 
> 
> -----Ursprüngliche Nachricht-----
> Von: news [mailto:[EMAIL PROTECTED] Im Auftrag von jaypee
> Gesendet: Freitag, 15. Juli 2005 09:20
> An: [email protected]
> Betreff: How to read data as it appears in the excel sheet.........
> 
> Hi Everyone,
>      I am trying to read(just read) the data from an excel sheet column.
>      The problem is, that particular column is formatted as "d/m/yy;@".
> When i
> read a cell in that column, it returns the alias value(eg., 38473) but
> not the
> actual value(eg., 5/1/05).
> 
>      How can i read the actual value(ie., 5/1/05) which is appears in
> that cell?
>      I am using Version : POI api 2.5.1.
> 
> Thanks in advance,
> Jaypee
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> Mailing List:     http://jakarta.apache.org/site/mail2.html#poi
> The Apache Jakarta Poi Project:  http://jakarta.apache.org/poi/
> 
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> Mailing List:     http://jakarta.apache.org/site/mail2.html#poi
> The Apache Jakarta Poi Project:  http://jakarta.apache.org/poi/
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> Mailing List:     http://jakarta.apache.org/site/mail2.html#poi
> The Apache Jakarta Poi Project:  http://jakarta.apache.org/poi/
> 
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
Mailing List:     http://jakarta.apache.org/site/mail2.html#poi
The Apache Jakarta Poi Project:  http://jakarta.apache.org/poi/

Reply via email to