如何在APL中创建数秒的时间字符串?

时间:2017-05-23 05:02:06

标签: time apl

我想把自午夜以来的秒数变成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

2 个答案:

答案 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

Try it online!

你在Dyalog,GNU和ngn / apl中你可以通过将它括在括号中来制作dfn(lambda)。试试in ngn/aplin Dyalog APL

使用Dyalog APL 16.0或更高版本,您可以使用@运算符放置冒号:

{1↓':'@4 7∊⍕¨100+24 60 60⊤⍵}

Try it online!