在我的应用程序中,时间信息存储在浮点字段中的 db 中,其中:
0 means 0 AM;
0.5 12 AM
0,999305555555556 is 11:59 PM
Run Code Online (Sandbox Code Playgroud)
转换为时间信息目前在我的应用程序中由 Ui 组件完成,这些组件旨在使用这种方式将时间信息保存为浮点数(这是在 SQL Server 2008R2 中引入 TIME 数据类型之前决定的)。
我的问题是:
如何执行这种转换?
分钟有 60 秒,
小时有 3600 秒,
天有 86400 秒,
将您的 (0-1) 浮点数乘以 86400(我们称之为 total_seconds),
1) total_seconds 除以 3600 的底数就是你的小时数
2) 从你的 total_seconds 中减去 hours*3600
3) total_seconds 除以 60 的底数就是你的分钟
4) 从你的 total_seconds 中减去 mins*60
6) 剩下的是什么你的秒
DECLARE @raw_input FLOAT = 0.999305555555556
DECLARE @total_seconds INT
DECLARE @hours INT, @minutes INT, @seconds INT
SET @total_seconds = @raw_input * 86400
SET @hours = FLOOR(@total_seconds/3600)
SET @total_seconds = @total_seconds - @hours * 3600
SET @minutes = FLOOR(@total_seconds/60)
SET @seconds = @total_seconds - @minutes * 60
Run Code Online (Sandbox Code Playgroud)
编辑:或者更简单,改编一个类似的问题/答案:
DECLARE @raw_input FLOAT = 0.999305555555556
DECLARE @secondss decimal = @raw_input*86400
SELECT CAST(CONVERT(VARCHAR,DATEADD(SECOND, @secondss, 0),108) AS TIME)
>23:59:00.0000000
Run Code Online (Sandbox Code Playgroud)