介绍
时间令人困惑。六十秒到一分钟,六十分钟到一小时,一天二十四小时(更不用说讨厌的上午/下午!)。
如今,没有这么大的愚蠢空间,因此我们决定采用唯一明智的选择:十进制天!也就是说,每天被认为是1个完整的单位,较短的部分则记作该天的小数部分。因此,例如:“ 12:00:00”将被写为“ 0.5”,而“ 01:23:45”将被写为“ 0.058159”。
因为要适应新系统将花费一些时间,所以您需要编写一个可以在两个方向之间进行转换的程序。
挑战
使用您选择的语言编写一个程序,该程序在ISO-8601格式为“ hh:mm:ss”的现代环境下将返回等效的十进制小数单位。同样,给定小数部分,程序应以最初指定的现代格式返回时间。
您可以进行以下假设:
- 现代时间输入和输出的范围可以从“ 00:00:00”到“ 24:00:00”
- 小数点输入和输出的范围可以从“ 0”到“ 1”,并且应该能够接受/输出至少5个小数位(例如“ 0.12345”)。可以接受更高的精度
- 程序应该能够知道基于输入执行哪个转换方向
- 您不能使用与时间相关的功能/库
获胜者将由符合条件的最短代码确定。至少以7个小数日为单位,或者如果/如果提交的数量足够,则选择它们。
例子
这是一个(故意)写得不好的JavaScript代码,以作为示例:
function decimalDay(hms) {
var x, h, m, s;
if (typeof hms === 'string' && hms.indexOf(':') > -1) {
x = hms.split(':');
return (x[0] * 3600 + x[1] * 60 + x[2] * 1) / 86400;
}
h = Math.floor(hms * 24) % 24;
m = Math.floor(hms * 1440) % 60;
s = Math.floor(hms * 86400) % 60;
return (h > 9 ? '' : '0') + h + ':' + (m > 9 ? '' : '0') + m + ':' + (s > 9 ? '' : '0') + s;
}
decimalDay('02:57:46'); // 0.12344907407407407
decimalDay('23:42:12'); // 0.9876388888888888
decimalDay(0.5); // 12:00:00
decimalDay(0.05816); // 01:23:45