【问题标题】:How to convert epoch unix time to TOD clock (STCK)?如何将纪元 unix 时间转换为 TOD 时钟(STUCK)?
【发布时间】:2020-11-12 20:28:14
【问题描述】:

请您帮我将 Unix 纪元时间转换为 TOD 时钟 (STCK) 8 字节。 例如:

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

【问题讨论】:

  • 你能用余数做除法吗?不确定unix时间是否也计算闰秒,这会使事情复杂化。
  • 是的,我可以。我在用C语言做
  • 真的是我的问题,是余数,
  • 我需要 STCK 和其余部分。
  • 不确定 STCK 是什么,但我认为 TOD 表示小时-分钟-秒。你可以使用div

标签: c assembly sas mainframe zos


【解决方案1】:

存储时钟指令 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.

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

【讨论】:

  • 我试图做与这里显示的完全相同的事情,但我的问题是纪元以秒为单位,除以 1000 时提醒被截断。
  • 两件事。首先,什么操作系统。其次,你想做什么。比较值。存储它们?了解应用程序可能有助于更好地帮助您
  • 1) Z/OS V2.4 2) 在 Z/OS Connect EE 中监控 API 请求者的两个时间点之间经过的时间的应用程序。我需要在两个 STCK 时间之间做差异来获得经过的时间。
  • 经过的时间是
  • 将 Unix Epoch 时间转换为 STCK 格式不会使您达到您正在寻找的 seconds.hundreths 分辨率,因为 Epoch 以秒为单位。您是在记录时间并进行比较,还是在使用来自 z/OS Connect 的日志/指标数据?您可以调用诸如 STCKCONV 之类的汇编程序服务,它可以让您将两个 STCK 时间转换为十进制格式以进行比较。
猜你喜欢
  • 1970-01-01
  • 2021-07-09
  • 2012-01-30
  • 2015-07-08
  • 2021-12-18
  • 1970-01-01
  • 2023-02-26
  • 2015-12-22
  • 2016-09-15
相关资源
最近更新 更多