我想把自午夜以来的秒数变成HH:MM:SS格式的字符串。
例如,数字17672
应变为字符串'04:54:32'
。我可以用数学来得到整数分量,如下所示:
T←17672
H←⌊T÷3600
MS←3600|T
M←⌊MS÷60
S←60|T
H M S
4 54 32
但是我不知道如何将这个数组的三个组件连接成一个字符串(用冒号分隔),和左边每次组件都用零填充。例如,我想要
6 0 8
为'06:00:08'
。
我可以使用GNU APL或在线ngn-apl
答案 0 :(得分:2)
第一步是使用" encode" -function:
来改善计算 24 60 60⊤17672
4 54 32
要格式化这些数字并插入冒号,我通常使用⎕FMT
这是特定于供应商的函数,将数字格式化为字符串。在大多数APL中执行此操作的一般方法可能是:
a←,⍕3 1⍴24 60 60⊤17672
1↓,':',3 2⍴('0',a)[1+(⍳⍴a)×a≠' ']
04:54:32
最后,您可以将其放入函数中,而不是在会话中执行此操作:
R←FormatSecs secs;a
a←,⍕3 1⍴60 60 60⊤secs
R←1↓,':',3 2⍴('0',a)[1+(⍳⍴a)×a≠' ']
让我们测试一下:
FormatSecs 17672
04:54:32
完成任务; - )
答案 1 :(得分:2)
在扩展APL(所有现代APL)中,您可以使用
1↓∊':',¨¯2↑¨⍕¨100+24 60 60⊤T
ngn / apl有一个不合格的⍕
所以你需要
1↓∊':',¨¯2↑¨,¨⍕¨100+24 60 60⊤T
你在Dyalog,GNU和ngn / apl中你可以通过将它括在括号中来制作dfn(lambda)。试试in ngn/apl和in Dyalog APL。
使用Dyalog APL 16.0或更高版本,您可以使用@
运算符放置冒号:
{1↓':'@4 7∊⍕¨100+24 60 60⊤⍵}