如何将纪元unix时间转换为TOD时钟STCK?

问题描述

请帮助我将Unix时代转换为TOD时钟(STCK)8个字节。 例如:

  1. 以十六进制表示的EPOCH时间='175BC71AFE2'X
  2. EPOCH时间(十进制)= 1,605,184,368,610
  3. ,我想将此小数转换为STCK(TOD时钟时间)吗?

解决方法

存储时钟指令STCK获取TOD时钟并将其存储在8字节字段中。位位置31大约每1.048576秒增加一次。这是link,提供了一种将STCK转换为当前日期的方法。

请参见以下类似问题的答案:将当前时间转换为TOD值,以使用Rexx here比较LogStream中的时间戳

我不确定您的应用程序是什么,但还要知道有一条使用扩展格式的STCKE指令。

为方便起见在这里引用

This works for me in a Rexx procedure:

Tod = (epoc*4096000000)+9048018124800000000

TOD (Time-of-Day in S360,S370,S390 & z/Arch IBM's archs) is a 
64bit counter whose Bit position 31 is incremented every 1.048576 
seconds,starting at 1900-01-01.

So,2**32/1.048576 = 4096000000 = 1 sec.

9048... is the difference between 1900-01-01 and epoch 1970-01-01 in TOD units.

有关第7-182页的有关STCK和STCKE格式的更多信息,请参见Principles of Operation