如何以 24 小时格式添加迄今为止的小时数

Posted

技术标签:

【中文标题】如何以 24 小时格式添加迄今为止的小时数【英文标题】:How to add hours to date in 24 hours format 【发布时间】:2019-03-12 10:27:58 【问题描述】:

例如,我想以 24 小时格式向结束日期添加 8 小时。 我尝试在第一行添加 + 8/24, 'DD-MM-YYYY HH24:MI:SS' 但这会出错。

这是我目前的查询。

SELECT to_char(IN_ENDDATE, 'DD-MM-YYYY HH24:MI:SS')
  INTO IN_END_DATE_STRING
  FROM DUAL;

【问题讨论】:

【参考方案1】:

您的第一行将日期转换为字符串。然后,您不能向其添加 8/24。转换前做加法:

SELECT to_char(IN_ENDDATE + 8/24.0, 'DD-MM-YYYY HH24:MI:SS')
INTO IN_END_DATE_STRING
FROM DUAL;

IN_ENDDATE 确实需要是日期类型才能允许+8/24 工作。如果是时间戳,则将其添加为间隔:

IN_ENDDATE + INTERVAL '8' HOUR

出于以下几个原因,使用此表单可能更安全:

它适用于日期和时间戳 更具可读性

如果 IN_ENDDATE 是非日期类型(例如 varchar),那么您的查询在没有 +8/24 的情况下也可以工作,因为它在传递给 to_char 之前已成功从 varchar 隐式转换为 date。在这种情况下,要么明确说明您的转化:

SELECT to_char(to_date(IN_ENDDATE, 'YYMMDD WHATEVER') + 8/24.0, 'DD-MM-YYYY HH24:MI:SS')
INTO IN_END_DATE_STRING
FROM DUAL

SELECT to_char(to_date(IN_ENDDATE, 'YYMMDD WHATEVER') + INTERVAL '8' HOUR, 'DD-MM-YYYY HH24:MI:SS')
INTO IN_END_DATE_STRING
FROM DUAL

或者将您的 IN_ENDDATE 参数设置为真正的日期类型

【讨论】:

以上是关于如何以 24 小时格式添加迄今为止的小时数的主要内容,如果未能解决你的问题,请参考以下文章

fullCalendar 的 24 小时时间格式(所以没有上午到下午)

如何格式化时间跨度以显示总小时数?

在python中添加24小时

每小时以 hh24:mi:ss 格式生成系列

C#如何将DateTime的12小时格式转换为24小时时间格式????

12小时制时间怎么改成24小时制