1

私はFlashとas3を使用して、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 によってオートフォーマットされたものです。今、Excell を as3 コードで読むと、日付と同じように 10 進数が表示されます。今回はこれを取得します:

    1.0416666666666667

この 10 進数で同じ関数を実行すると、次のようになります。

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

これは明らかに間違っています。私が得たように、その関数を使用すると、時間ではなく日付のみを操作できます。誰でもこれを見て、この関数で作業する時間を得る方法を理解できますか?

4

1 に答える 1

2

この質問を書いているときに、私は自分でそれを理解しました。Excel のタイムスタンプは 1900/01/01 から始まる合計日数であることが文書化されています。これは、小数点以下の数字が 1 日の割合であることを意味します。私にとっては、その数に 1 日の合計秒数を掛けただけで、正しい時間が得られました。機能は次のとおりです。

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

したがって、同じ問題を抱えている人は誰でも、これでうまくいくはずです。

于 2013-08-28T19:22:25.540 に答える