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

Time 如何从APL中的秒数创建时间字符串?,time,apl,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

我想将午夜后的秒数转换为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或联机

第一步是使用“-函数改进计算:

      24 60 60⊤17672
4 54 32
R←FormatSecs secs;a
a←,⍕3 1⍴60 60 60⊤secs
R←1↓,':',3 2⍴('0',a)[1+(⍳⍴a)×a≠' ']
要格式化这些数字并插入冒号,我通常使用
⎕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

完成任务;-)

第一步是使用“-”函数改进计算:

      24 60 60⊤17672
4 54 32
R←FormatSecs secs;a
a←,⍕3 1⍴60 60 60⊤secs
R←1↓,':',3 2⍴('0',a)[1+(⍳⍴a)×a≠' ']
要格式化这些数字并插入冒号,我通常使用
⎕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
完成任务;-)

在扩展APL(所有现代APL)中,您可以使用

1↓∊':',¨¯2↑¨⍕¨100+24 60 60⊤T
ngn/apl有一个不合格的
所以您需要

1↓∊':',¨¯2↑¨,¨⍕¨100+24 60 60⊤T

在Dyalog、GNU和ngn/apl中,您可以通过将其括在大括号中来生成dfn(lambda)。试试看

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

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

在扩展APL(所有现代APL)中,您可以使用

1↓∊':',¨¯2↑¨⍕¨100+24 60 60⊤T
ngn/apl有一个不合格的
所以您需要

1↓∊':',¨¯2↑¨,¨⍕¨100+24 60 60⊤T

在Dyalog、GNU和ngn/apl中,您可以通过将其括在大括号中来生成dfn(lambda)。试试看

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

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

这里的东西很棒!我确实想要一个函数,我在这里生成了这个函数,但不幸的是,我的冒号之间有空格
encode
非常棒。实际上,在结果中使用这些空格的原因是,您将数字保留为数字,并生成了一个异构结果,然后APL插入空格作为分隔符。您可以通过执行
H来改进该代码←¯2↑'0',⍕ ⌊ ⍵ ÷3600
等。或者,R← 1.↓ , ':' , 0 1↓⍕(0 60 60 ⊤ 十)∘.+,这里真是太棒了!我确实想要一个函数,我在这里生成了这个函数,但不幸的是,我的冒号之间有空格
encode
非常棒。实际上,在结果中使用这些空格的原因是,您将数字保留为数字,并生成了一个异构结果,然后APL插入空格作为分隔符。您可以通过执行
H来改进该代码←¯2↑'0',⍕ ⌊ ⍵ ÷3600
等。或者,R← 1.↓ , ':' , 0 1↓⍕(0 60 60 ⊤ 十)∘.+,100