【问题标题】:Convert decimal representing time to hour, minutes, seconds将表示时间的十进制转换为小时、分钟、秒
【发布时间】:2011-04-18 02:31:06
【问题描述】:

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

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

使用这个小数,我如何填写HoursMinutesSeconds 值?

【问题讨论】:

  • 从用户名来看,可能是.NET语言:P

标签: math date time


【解决方案1】:

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

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

【讨论】:

  • int seconds = (minutesAsADecimal - minutesAsAnInt) * 60?
  • 不会将小时部分转换为 int,如果余数 > .5,则会给出不正确的结果
  • @DavidB 转换为 int 总是向下取整,而不是向上取整。
  • 我在 vb 中使用 Cint,它的行为不是这样,所以它们必须不同
【解决方案2】:

时间应该很轻松。

1小时有60分钟,所以取小数部分,乘以60,取整数。再取小数,再乘以 60,就得到了秒数。

例如,我们取号码20.38490

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

这给我们留下了号码.38490

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

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

【讨论】:

  • 比上面更有帮助!
【解决方案3】:

您可以使用 floor 函数去除小时数,将分钟数和秒数保留为一小时的一小部分。然后,您可以再次使用 floor 功能在不到一个小时的时间内去除这些细节。然后你就剩下几秒钟了(作为一个小时的几分之一)

下面是一个打印小时和分钟的简单示例,日出是从午夜开始的分数小时

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

【讨论】:

    【解决方案4】:

    无论您使用哪种语言,您都可以使用数学函数: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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多