2013-08-28 78 views
1

我正在使用Flash和as3将Excel时间戳转换为正常时间戳,因此 - 正常日期。Excel奇怪的时间戳。如何将其转换回正常的时间戳?

我有这个功能

public static function dateFromExcel(date:Number):Date { 
     return new Date(1970, 0, 1 + (date - 25569)); 
    } 

,如果我只需要一个正确的日期(年,月,日)这工作得很好。但现在我有时间,即如下在Excel中显示:

1:00:00 

但电池的真正价值在于:

1/1/1900 1:00:00 AM 

这是一个用Excel autoformatted。现在,当我用as3代码阅读Excell时,如同日期一样,我得到十进制数。对于这一次我得到这个:

1.0416666666666667 

当我运行这个十进制数相同的功能,我得到这个:

Mon Jan 1 00:00:00 GMT+0200 1900 

这显然是不正确。 就我所知,使用该功能,我只能使用日期而不是时间。任何人都可以看看这个,弄清楚,如何让时间使用这个函数呢?

回答

2

在我写这个问题的时候,我想到了自己。 据记录,excel时间戳是1900/01/01开始的总天数。 所以这意味着,小数点后的数字是一天的百分比。对我而言,我只是在一天内将这个数字乘以秒数,并获得了正确的时间。功能如下:

public static function dateFromExcel(date:Number):Date { 
    var sec_ind_day:Number = 86400; 
    var secs:Number = sec_ind_day*date%1; 
    var _d:Date = new Date(1970, 0, 1 + (date - 25569)); 
    return new Date(_d.fullYear, _d.month, _d.date, _d.hours, _d.minutes, secs); 
} 

所以,任何人谁得到同样的问题,这应该工作得很好。