iT邦幫忙

0

DateTime format 問題

44007.2132467708 這種時間format 是哪種的? 之前有看過但忘了。
不知道有沒有大大知道/images/emoticon/emoticon82.gif

slime iT邦大師 1 級 ‧ 2020-07-31 11:51:50 檢舉
很像這種:
https://docs.microsoft.com/zh-tw/office/troubleshoot/excel/1900-and-1904-date-system

以1900/1/1或1904/1/1當0, 每天差1, 每小時=1/24這樣去算
DateTime dt = DateTime.Now;
Debug.WriteLine(dt.ToOADate().ToString());
//44043.5574470255
S卡特 iT邦新手 5 級 ‧ 2020-07-31 15:21:05 檢舉
也感謝各樓的大大回覆

2 個回答

1
浩瀚星空
iT邦超人 1 級 ‧ 2020-07-31 14:18:16
最佳解答

用學術用語叫做 OLE自動化日期
白話點是一種將日期數值化的算法。基數1值是在1900/1/1算為1。

畢竟時間有差異值並非是10進位。而是24 60 60 這樣的區分。
所以才有這樣的計算方式。
大多數是用在快速的計算天數並將其數值化。雖然現在很少看到這些。
但說在某些機器的程式應用還是用這樣的算法處理。

其實用如下的公式也可以算出來的

(date - new Date(1900, 1, 1))/(24 * 60 * 60 * 1000);
S卡特 iT邦新手 5 級 ‧ 2020-07-31 14:47:32 檢舉

原來是這樣 又上了一課 感恩大大 ~~

1
japhenchen
iT邦研究生 1 級 ‧ 2020-08-03 08:38:51

44007.2132467708 看起來是Delphi或Pascal的日期時間,算法是從1899年12月30日早上12點0分0秒起算,每多1天就加1,後面的小數代表的一天內的時間,小數乘86400得時間

囉嗦了一段,如果你是從資料庫裡看到這個時間日期欄位,你可以用 C# 或其他語言轉換成相應格式

以C#為例

using System;

namespace MathGame
{
    class Program
    {
        static void Main(string[] args)
        {            
            Console.WriteLine(
                new DateTime(1899, 12, 30, 0, 0, 0)
                    .AddDays(44007.2132467708)
                    .ToString("yyyy/MM/dd hh:mm:ss")
                );
            Console.ReadKey();
        }

    }
}

輸出結果
2020/06/25 05:07:04

S卡特 iT邦新手 5 級 ‧ 2020-08-03 09:26:41 檢舉

了解~~ 感謝分享解答

我要發表回答

立即登入回答