IBM大型机论坛索引
 
 登录
 
IBM大型机论坛索引  大型机:搜索 IBM Mainframe论坛:常见问题解答  寄存器
 

用时间戳计算


IBM大型机论坛 -> PL / I& Assembler
 发表新话题     回复主题
查看上一个主题 :: 查看下一个主题  
作者 信息
鲁道夫

新的用户


加入:2021年1月21日
帖子:7
地点:Österreich

 发布 发表于:2021年1月21日,星期四2:57 pm
 引用回复

您好,我是新来的。

我对PL1不了解,我想减去2个时间戳。
timst1-timst2的结果应采用以下形式-> 00.01.13.385771

DCL ZW_TIMST CHAR(26);
timst1 = timestamp();
…。
timst2 = timestamp();

我得到(例如)2021-01-21-06.34.59.359528并想要转换为整数,我可以计算出
HH * 60 * 60 * 1000000 + MM * 60 * 1000000 + SS * 1000000 +密尔-(HH2 * 60 * 60 * 1000000 + MM2 * 60 * 1000000 + SS2 * 1000000 +密尔2)
然后我计算小时,分钟,秒和百万分之一秒

您能帮我如何从char转换为integer吗?我应该使用哪种数据类型?
我应该表现出色

谢谢!
回到顶部
查看用户资料 发送私信
谢尔盖肯

活跃的成员


已加入:2008年4月29日
职位:941
所在地:马里兰

 发布 发表:2021年1月21日星期四7:09 pm
 引用回复

1.使用函数SUBSTR从时间戳字符串中提取数字子字符串。
2.将提取的CHAR子字符串转换为FIXED BINARY值。
3.使用FIXED BINARY执行所有算术运算。
4.将最终结果转换为格式化的CHAR字符串。

You can find these examples in any PL / IManual For Beginners.
回到顶部
查看用户资料 发送私信
尼克·克劳斯顿

全球主持人


加入时间:2007年5月10日
帖子:2455
地点:英国汉普郡

 发布 发表:2021年1月21日,星期四7:27 pm
 引用回复

我将在CHAR(26)变量上定义一个结构,并将数字部分定义为PIC 9s,您可以在计算中直接使用这些结构,但是我会将其复制到FIXED DEC变量中。

您还需要注意贯穿午夜的时间戳。
回到顶部
查看用户资料 发送私信
鲁道夫

新的用户


加入:2021年1月21日
帖子:7
地点:Österreich

 发布 发表:2021年1月22日星期五上午11:27
 引用回复

尼克·克劳斯顿(Nic Clouston)写道:
我将在CHAR(26)变量上定义一个结构,并将数字部分定义为PIC 9s,您可以在计算中直接使用这些结构,但是我会将其复制到FIXED DEC变量中。

您还需要注意贯穿午夜的时间戳。


您能举个例子重新定义吗?

在Cobol,我会这样做...

05 timst。
10 timst-yyyy图片9(4)。
10个填充图片x(1)。
10 timst-mm图片9(2)。
10个填充图片x(1)。
10 timst-dd图片9(2)。
……

但是在pl1?
回到顶部
查看用户资料 发送私信
史蒂夫·迈尔斯

活跃的成员


已加入:2013年11月30日
帖子:870
地点:宇宙

 发布 发表:2021年1月22日星期五1:35 pm
 引用回复

忘记使用此时间戳函数返回的字符串。我几乎可以肯定这是一个功能 您的 安装写道。在我看来,它返回的字符串是IBM TIME宏返回的十六进制数字的字符表示。

我为您带来了消息:TIME宏还有许多其他选择。其中之一是返回一个64位二进制值,该值表示转换为微秒的当前日时钟,即 究竟 你想要什么。

除非您想编写兼容LE的汇编程序,否则我会阅读《语言环境》手册。我敢打赌,这里有一个LE函数,它可以以更易于使用的格式提供您所需的内容。
回到顶部
查看用户资料 发送私信
鲁道夫

新的用户


加入:2021年1月21日
帖子:7
地点:Österreich

 发布 发表:2021年1月22日星期五2:24 pm
 引用回复

时间微距?

我是那样做的

DCL PNT_T1 POINTER STATIC;
DCL ZW_TIMST1_X CHAR(26)为基础(PNT_T1);
DCL 1 ZW_TIMST1为基础(PNT_T1),
2张ZW_TIMST1_YYYY图片'9999',
2 ZW_TIMST1_X1 焦炭(1),
2 ZW_TIMST1_MM PIC'99',
2 ZW_TIMST1_X2 焦炭(1),
2 ZW_TIMST1_DD PIC'99',
2 ZW_TIMST1_X3 焦炭(1),
2 ZW_TIMST1_HH PIC'99',
2 ZW_TIMST1_X4 焦炭(1),
2 ZW_TIMST1_MI PIC'99',
2 ZW_TIMST1_X5 焦炭(1),
2 ZW_TIMST1_SS PIC'99',
2 ZW_TIMST1_X6 焦炭(1),
2个ZW_TIMST1_MIS PIC'999999';

ZW_TIMST1_X =时间戳();

但这是行不通的。我在指令中出错
回到顶部
查看用户资料 发送私信
尼克·克劳斯顿

全球主持人


加入时间:2007年5月10日
帖子:2455
地点:英国汉普郡

 发布 发表:2021年1月22日星期五下午2:59
 引用回复

什么错您没有显示ZW_TIMST1_X的分配。您可以这样编写声明:
码:

DCL ZW_TIMST1_X CHAR(26);
DCL 1 ZW_TIMST1 DEF ZW_TIMST1_X POS(1),
         2张ZW_TIMST1_YYYY图片'9999',
         2 ZW_TIMST1_X1 CHAR(1),
         2 ZW_TIMST1_MM PIC'99',
         2 ZW_TIMST1_X2 CHAR(1),
         2 ZW_TIMST1_DD PIC'99',
          :

请注意使用代码标签来显示代码。请以后再这样做。
回到顶部
查看用户资料 发送私信
鲁道夫

新的用户


加入:2021年1月21日
帖子:7
地点:Österreich

 发布 发表:2021年1月22日星期五3:27 pm
 引用回复

我不知道我必须分配。
在Cobol中,我仅重新定义。
我过去不使用指针

谢谢,现在分配后就可以了。

我在您的上一个代码中不理解POS(1)
回到顶部
查看用户资料 发送私信
加里·卡罗尔

高级会员


加入时间:2006年5月8日
职位:1100
所在地:爱尔兰都柏林

 发布 发表:2021年1月22日星期五4:29下午
 引用回复

[引用]
码:
码:

DCL ZW_TIMST1_X CHAR(26);
DCL 1 ZW_TIMST1 DEF ZW_TIMST1_X POS(1),
         2张ZW_TIMST1_YYYY图片'9999',
         2 ZW_TIMST1_X1 CHAR(1),
         2 ZW_TIMST1_MM PIC'99',
         2 ZW_TIMST1_X2 CHAR(1),
         2 ZW_TIMST1_DD PIC'99',
          :[/quote]


将字段定义为开始POSition(1)类似于Cobol的REDEFINES。就个人而言,我更喜欢基于地址或指向基础字段的指针。

加油
回到顶部
查看用户资料 发送私信
鲁道夫

新的用户


加入:2021年1月21日
帖子:7
地点:Österreich

 发布 发表:2021年1月22日星期五4:56 pm
 引用回复

码:

     DCL PNT_T1      POINTER STATIC;
     DCL ZW_TIMST1_X    CHAR (26)  BASED (PNT_T1);
     DCL 1基于ZW_TIMST1(PNT_T1),
          2 ZW_TIMST1_YYYY        PIC '9999',
          2 ZW_TIMST1_X1          CHAR (1),
          2 ZW_TIMST1_MM          PIC '99',
          2 ZW_TIMST1_X2          CHAR (1),
          2 ZW_TIMST1_DD          PIC '99',
          2 ZW_TIMST1_X3          CHAR (1),
          2 ZW_TIMST1_HH          PIC '99',
          2 ZW_TIMST1_X4          CHAR (1),
          2 ZW_TIMST1_MI          PIC '99',
          2 ZW_TIMST1_X5          CHAR (1),
          2 ZW_TIMST1_SS          PIC '99',
          2 ZW_TIMST1_X6          CHAR (1),
          2 ZW_TIMST1_MIS         PIC '999999';
     DCL ZW_TIMST1_N        BIN FIXED(31);

     ZW_TIMST1_X =时间戳();

/ *变体1 * /
     ZW_TIMST1_N = ZW_TIMST1_HH* 1000000 * 60 * 60;

/ *变体2        */
     ZW_TIMST1_N = ZW_TIMST1_HH;
     ZW_TIMST1_N = ZW_TIMST1_N * 1000000 * 60 * 60;


为什么变体1不起作用?
变体2正常工作。为什么需要将ZW_TIMST1_HH移到ZW_TIMST1_N。只有在那之后才有可能乘法
回到顶部
查看用户资料 发送私信
谢尔盖肯

活跃的成员


已加入:2008年4月29日
职位:941
所在地:马里兰

 发布 发表:2021年1月22日星期五6:20 pm
 引用回复

鲁道夫写道:

为什么变体1不起作用?

“无效”一词毫无意义。
如果你需要帮助, 你必须 在此显示有意义的信息,例如:
1)编译错误?
2)执行错误?错误代码或消息?
3)节目结束?结束码?
4)结果不正确?到底是什么问题?
5)计算机着火或爆炸?
等等等等
回到顶部
查看用户资料 发送私信
尼克·克劳斯顿

全球主持人


加入时间:2007年5月10日
帖子:2455
地点:英国汉普郡

 发布 发表:2021年1月22日星期五6:30 pm
 引用回复

没有人知道错误是不知道的。一种可能是系统分配的中间字段之一太小。参考《 PL / 1程序员指南》手册可能会有所帮助。
如果您不知道什么是POS(1),请参阅PL / 1语言参考手册。
在PL / 1中,如果要使用受控存储,则必须分配。在COBOL中,您可能未使用受控存储,因此REDEFINEs可以工作。
回到顶部
查看用户资料 发送私信
鲁道夫

新的用户


加入:2021年1月21日
帖子:7
地点:Österreich

 发布 发表:2021年1月22日星期五7:28 pm
 引用回复

这是执行错误

码:
IBM0301S ONCODE = 320 ZERODIVIDE条件升高。
         从语句6516的入口点MBV223开始,编译单元偏移+0000
         address 20DDC9E2.
提出了ERROR条件
回到顶部
查看用户资料 发送私信
鲁道夫

新的用户


加入:2021年1月21日
帖子:7
地点:Österreich

 发布 发表:2021年1月22日星期五7:47 pm
 引用回复

好的,这是一个溢出
回到顶部
查看用户资料 发送私信
尼克·克劳斯顿

全球主持人


加入时间:2007年5月10日
帖子:2455
地点:英国汉普郡

 发布 发表:2021年1月22日星期五8:03 pm
 引用回复

好吧,这是零分而不是溢出。但是,由于您没有进行除法运算,因此它必须在生成的代码中-可能是由溢出引起的。
出于性能原因,应先将PIC变量转换为FIXED DEC,然后再转换为FIXED BIN。做PIC->FIXED BIN直接意味着调用子例程-对此应该有一个编译器消息。
回到顶部
查看用户资料 发送私信
谢尔盖肯

活跃的成员


已加入:2008年4月29日
职位:941
所在地:马里兰

 发布 发表:2021年1月22日星期五8:11下午
 引用回复

如果发生此类错误,您需要执行的第一步: 在进行任何其他操作之前,按原样打印所有涉及的字段.

(下一步可能是:逐步打印一些中间结果。)

对于在其(专业)生活中处理过至少一种使用任何语言的单个程序代码的专业人员而言,这是一种非常标准的方法。
回到顶部
查看用户资料 发送私信
普里诺
警告:1

高级会员


已加入:2009年2月7日
职位:1241
地点:立陶宛维尔纽斯

 发布 发表:2021年1月22日星期五9:28 pm
 引用回复

您以及该线程中的其他每个人真正需要做的是 实时FM !

Enterprise PL / Ihas a ton of builtin functions to work with dates and times!
回到顶部
查看用户资料 发送私信
谢尔盖肯

活跃的成员


已加入:2008年4月29日
职位:941
所在地:马里兰

 发布 发表:2021年1月23日星期六1:38 am
 引用回复

普里诺写道:
您以及该线程中的其他每个人真正需要做的是 实时FM !

Enterprise PL / Ihas a ton of builtin functions to work with dates and times!

没有内置函数,或者其他任何对编程没有一点了解的函数都可以提供帮助。
回到顶部
查看用户资料 发送私信
普里诺
警告:1

高级会员


已加入:2009年2月7日
职位:1241
地点:立陶宛维尔纽斯

 发布 发表:2021年1月23日星期六4:36 pm
 引用回复

史蒂夫·迈尔斯写道:
忘记使用此时间戳函数返回的字符串。我几乎可以肯定这是一个功能 您的 安装写道。


Nope, it's a standard PL / Ibuiltin function.
回到顶部
查看用户资料 发送私信
普里诺
警告:1

高级会员


已加入:2009年2月7日
职位:1241
地点:立陶宛维尔纽斯

 发布 发表:2021年1月23日星期六8:37 pm
 引用回复

尼克·克劳斯顿(Nic Clouston)写道:
我将在CHAR(26)变量上定义一个结构,并将数字部分定义为PIC 9s,您可以在计算中直接使用这些结构,但是我会将其复制到FIXED DEC变量中。

编译器无论如何都将执行此操作,因此,除非您需要特定的精度,否则实际上不必自己执行此操作。
回到顶部
查看用户资料 发送私信
查看上一个主题 :: :: 查看下一个主题  
 发表新话题     回复主题 查看书签
所有时间均为格林尼治标准时间+ 6小时
论坛索引 -> PL / I& Assembler

 


类似主题
话题 论坛 回覆
 没有新帖 Z / VSE JCL的TCP / IP中的时间戳 JCL和VSAM 0
 没有新帖 如何添加日期& timestamp to th... DFSORT / ICETOOL 5
 没有新帖 计算记录数并根据... DFSORT / ICETOOL 1
 没有新帖 DB2 Timestamp字段很奇怪。 DB2 8
 没有新帖 如何获取MQPUT时间戳? Java和MQSeries 3
搜索我们的论坛:


 回到顶部