确定日期时间编码或格式

Ste*_*e F 1 delphi datetime-format

我正在编写一个 Delphi 程序,该程序需要与存储在属于另一个程序的 SQLite 数据库中的数据进行交互。到目前为止一切正常,除了我无法从 SQLite 数据库的列中的数据存储中获取数据类型为“datetime”的日期/时间值。

我确实知道字段的数据类型在 SQLite 中是不相关的,并且所有内容都存储为字符串,也许这就是我发现自己陷入这种困境的原因。

下面是存储在 SQLite 数据库中的几行数据(第 3 列)与读取和写入此 SQLite 数据库的程序(第 2 列)中显示的相应日期值的示例:

1   11/7/1971   621939168000000000
2   3/17/1976   623314656000000000
3   5/4/1996    629667648000000000
4   9/21/2007   633259296000000000
5   11/17/1972  622264032000000000
6   2/7/1996    629592480000000000
7   6/13/2000   630964512000000000
Run Code Online (Sandbox Code Playgroud)

我的要求:当我从 Delphi 程序中读取第 3 列中的值后,如何将其转换为与第 2 列中显示的相同日期/时间值?我尝试过 UnixToDateTime 函数,但它不会产生相同的值(如第 2 列)。有人可以帮忙吗?

提前致谢!

Uwe*_*abe 9

第 3 列中的值是自 1/1/0001 以来的 100 纳秒数。您可以将其转换为 Delphi,TDateTime如下所示:

  theDate := (Value/864000000000) - 693593;
Run Code Online (Sandbox Code Playgroud)

  • 这背后并没有什么魔力。从上面的列表中取出两个值对,命名为“date1:value1”和“date2:value2”。计算“(value2 - value1)/DaysBetween(date1, date2)”,您将得到分母,不出所料,它是每天 100 ns 的数量。然后计算“DaysBetween(date1, value1/deminator)”,得到 693593。 (2认同)