在我的应用程序中,时间信息存储在db中的float字段中,其中:
0 means 0 AM;
0.5 12 AM
0,999305555555556 is 11:59 PM
转换为时间信息目前在我的应用程序中由Ui组件完成,这些组件旨在以这种方式工作以将时间信息保存为float(这是在SQL Server 2008R2中引入TIME数据类型之前决定的)。
我的问题是:
如何进行这种转换?
答案 0 :(得分:4)
分钟有60秒,
小时有3600秒,
日有86400秒,
将你的(0-1)浮点数乘以86400(我们称之为total_seconds),
1)total_seconds除以3600的分区将是你的小时
2)从你的total_seconds减去小时* 3600
3)total_seconds除以60的分层将是你的分钟
4)从你的total_seconds减去分钟* 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
编辑:或更简单,适应类似的question/answer:
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