将十进制表示时间转换为小时,分钟,秒

时间:2011-04-18 02:31:06

标签: math date time

我有一个小数。该小数的范围介于0和23.999999之间。该小数表示时间。例如,如果小数是0.25,那么它表示的时间是12:15 AM。如果小数是23.50,它代表的时间是晚上11:30。

我有三个变量:     - 小时     - 分钟      - 秒钟

使用此小数,如何填写HoursMinutesSeconds值?

4 个答案:

答案 0 :(得分:11)

嗯,这是C#中的答案,但在大多数语言中它通常是相同的想法:

int hours = (int)hoursDecimal;
decimal minutesDecimal = ((hoursDecimal - hours) * 60);
int minutes = (int)minutesDecimal;
int seconds = (int)((minutesDecimal - minutes) * 60);

答案 1 :(得分:2)

时间应该非常简单。

1小时内有60分钟,所以得到小数部分,乘以60,取整数。再次取小数,再将它再乘以60,就可以得到秒数。

例如,我们取数字20.38490

我们知道现在是20小时或晚上8点。

这会给我们留下号码.38490

乘以60,我们得到23.094分钟。

.094乘以60,我们得到5秒。

答案 2 :(得分:1)

你可以使用地板功能去除时间,并将minuites和秒留下一小时。然后你可以再次使用地板功能来剥离minuites,只需一小时。然后,您将获得秒数(以小时为单位)

下面打印小时和分钟日出的简单示例是从午夜起的小时数

printf( "sunrise %ld:%ld, \n", 
             (long)floor( sunrise ),
                 (long)(floor( sunrise * 60 ) - 60 * floor( sunrise )) );

答案 3 :(得分:0)

无论使用何种语言,您都可以使用数学函数执行此操作:MOD和FLOOR / TRUNC

设“dec”为十进制变量

trunc(mod(dec, 1)) => hours
trunc(mod(dec * 60, 60)) => minutes
trunc(mod(dec * 3600, 60)) => seconds

在C#中,您可以使用显式转换将小数截断为int,例如

int seconds = (int) ((dec * 3600) % 60)