【问题标题】:SQLite: add DateTime and TimeSpanSQLite:添加 DateTime 和 TimeSpan
【发布时间】:2020-01-20 10:35:09
【问题描述】:

我有一个包含 TimeFrames 的 SQLite 表。每个 TimeFrame 都有(至少)一个 EndTime 和一个 Duration:

  • EndTime 表示时间范围的结束日期时间;在 SQLite 中,这是一个格式为 yyyy-MM-dd HH:mm:ss
  • 的字符串
  • Duration 表示时间范围的 TimeSpan;在 SQLite 中,这是一个表示 Duration 的 TotalSeconds 的双精度值。

给定一些 DateTime 值 dt,查询在 dt 之前开始的所有 TimeFrames。

SELECT ...
FROM
WHERE dt < TimeFrame.EndTime - TimeFrame.Duration

要执行日期时间计算,SQLite has some Date and Time Functions.。这有助于我执行 Where。

DateTime dt = ...
String dtText = DateTimeToSqlLiteFormat(dt);   // yyyy-MM-dd HH:mm:ss.ttt

还有 SQLite:

Select ... From ...
Where dtText < DateTime( EndTime, "-nnn.nnnn seconds")

其中nnn.nnnn 是 Duration 值的字符串表示形式。

所以我所要做的就是将列 Duration 转换为 nnn.nnnn。由于 Duration 已经是它所代表的 TimeSpan 的两倍 TotalSeconds,我想这不会太难。

但是怎么做呢?

【问题讨论】:

标签: c# sqlite


【解决方案1】:

我不知道这是否仍然相关,但你需要反过来做。使用strftime('%s', EndTime)(或 julianday)将您的 EndDate 转换为 Unix 时间,然后从中减去持续时间:

Select ... From ...
Where dtText < strftime('%s', EndTime) - Duration

【讨论】:

  • 我最终将所有日期时间和时间跨度都转换为刻度。更容易进行计算。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
相关资源
最近更新 更多