【问题标题】:Show time diff as HH:MM:SS between two datetimes in SQLite在 SQLite 中的两个日期时间之间将时间差异显示为 HH:MM:SS
【发布时间】:2020-05-19 04:54:24
【问题描述】:

我有两个不同的日期时间:2020-05-18 12:30:012020-05-17 13:00:00
我想以HH:MM:SS的格式显示它们之间的时差,也就是23:30:01

如果差值大于 24 小时,比如 28 小时 12 分 45 秒,则会显示为 28:12:45

如何在 SQLite 中做到这一点?

【问题讨论】:

  • 如果差值大于 24 小时应该是什么结果?
  • @forpas 比如说 26:30:01,它仍然正常计算小时数。

标签: sqlite datetime


【解决方案1】:

SQLite 支持有限数量的日期时间操作函数。
其中一个函数是strftime(),和

strftime('%s', somedate)

返回从 '1970-01-01'somedate 的秒数。

通过使用这个函数、算术计算、字符串填充和连接,你可以得到你想要的:

  CASE WHEN ((strftime('%s', date1) - strftime('%s', date2)) / 3600) < 10 THEN '0' ELSE '' END ||
  ((strftime('%s', date1) - strftime('%s', date2)) / 3600) || ':' ||   
  SUBSTR('0' || (((strftime('%s', date1) - strftime('%s', date2)) / 60) % 60), -2) || ':' ||   
  SUBSTR('0' || ((strftime('%s', date1) - strftime('%s', date2)) % 60), -2) 

date1date2 替换为您的日期。

查看简化的demo

【讨论】:

  • 啊,一点点创造性思维会大有帮助,谢谢。我以此为基础来解决我的一个问题。
【解决方案2】:
SELECT time(
(
  julianday('2020-05-18 12:30:01')-
  julianday('2020-05-17 13:00:00')
)*60*60*24, 'unixepoch'
);

时差小于24h时回答问题...

【讨论】:

  • 即使第一个日期是 2020-05-19 12:30:01,它也会返回 23:30:01。正确的结果应该是 47:30:01。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-08
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 2021-10-21
  • 2021-11-25
相关资源
最近更新 更多