查看上一个主题 :: 查看下一个主题
|
作者 |
信息 |
鲁道夫
新的用户
加入:2021年1月21日 帖子:7 地点:Österreich
|
|
|
|
您好,我是新来的。
我对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 所在地:马里兰
|
|
|
|
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 地点:英国汉普郡
|
|
|
|
我将在CHAR(26)变量上定义一个结构,并将数字部分定义为PIC 9s,您可以在计算中直接使用这些结构,但是我会将其复制到FIXED DEC变量中。
您还需要注意贯穿午夜的时间戳。 |
|
回到顶部 |
|
 |
鲁道夫
新的用户
加入:2021年1月21日 帖子:7 地点:Österreich
|
|
|
|
尼克·克劳斯顿(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 地点:宇宙
|
|
|
|
忘记使用此时间戳函数返回的字符串。我几乎可以肯定这是一个功能 您的 安装写道。在我看来,它返回的字符串是IBM TIME宏返回的十六进制数字的字符表示。
我为您带来了消息:TIME宏还有许多其他选择。其中之一是返回一个64位二进制值,该值表示转换为微秒的当前日时钟,即 究竟 你想要什么。
除非您想编写兼容LE的汇编程序,否则我会阅读《语言环境》手册。我敢打赌,这里有一个LE函数,它可以以更易于使用的格式提供您所需的内容。 |
|
回到顶部 |
|
 |
鲁道夫
新的用户
加入:2021年1月21日 帖子:7 地点:Österreich
|
|
|
|
时间微距?
我是那样做的
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 地点:英国汉普郡
|
|
|
|
什么错您没有显示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
|
|
|
|
我不知道我必须分配。
在Cobol中,我仅重新定义。
我过去不使用指针
谢谢,现在分配后就可以了。
我在您的上一个代码中不理解POS(1) |
|
回到顶部 |
|
 |
加里·卡罗尔
高级会员
加入时间:2006年5月8日 职位:1100 所在地:爱尔兰都柏林
|
|
|
|
[引用]
码:
码: |
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
|
|
|
|
码: |
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 所在地:马里兰
|
|
|
|
“无效”一词毫无意义。
如果你需要帮助, 你必须 在此显示有意义的信息,例如:
1)编译错误?
2)执行错误?错误代码或消息?
3)节目结束?结束码?
4)结果不正确?到底是什么问题?
5)计算机着火或爆炸?
等等等等 |
|
回到顶部 |
|
 |
尼克·克劳斯顿
全球主持人
加入时间:2007年5月10日 帖子:2455 地点:英国汉普郡
|
|
|
|
没有人知道错误是不知道的。一种可能是系统分配的中间字段之一太小。参考《 PL / 1程序员指南》手册可能会有所帮助。
如果您不知道什么是POS(1),请参阅PL / 1语言参考手册。
在PL / 1中,如果要使用受控存储,则必须分配。在COBOL中,您可能未使用受控存储,因此REDEFINEs可以工作。 |
|
回到顶部 |
|
 |
鲁道夫
新的用户
加入:2021年1月21日 帖子:7 地点:Österreich
|
|
|
|
这是执行错误
码: |
IBM0301S ONCODE = 320 ZERODIVIDE条件升高。
从语句6516的入口点MBV223开始,编译单元偏移+0000
address 20DDC9E2.
提出了ERROR条件 |
|
|
回到顶部 |
|
 |
鲁道夫
新的用户
加入:2021年1月21日 帖子:7 地点:Österreich
|
|
|
|
好的,这是一个溢出 |
|
回到顶部 |
|
 |
尼克·克劳斯顿
全球主持人
加入时间:2007年5月10日 帖子:2455 地点:英国汉普郡
|
|
|
|
好吧,这是零分而不是溢出。但是,由于您没有进行除法运算,因此它必须在生成的代码中-可能是由溢出引起的。
出于性能原因,应先将PIC变量转换为FIXED DEC,然后再转换为FIXED BIN。做PIC->FIXED BIN直接意味着调用子例程-对此应该有一个编译器消息。 |
|
回到顶部 |
|
 |
谢尔盖肯
活跃的成员

已加入:2008年4月29日 职位:941 所在地:马里兰
|
|
|
|
如果发生此类错误,您需要执行的第一步: 在进行任何其他操作之前,按原样打印所有涉及的字段.
(下一步可能是:逐步打印一些中间结果。)
对于在其(专业)生活中处理过至少一种使用任何语言的单个程序代码的专业人员而言,这是一种非常标准的方法。 |
|
回到顶部 |
|
 |
普里诺 警告:1 高级会员

已加入:2009年2月7日 职位:1241 地点:立陶宛维尔纽斯
|
|
|
|
您以及该线程中的其他每个人真正需要做的是 实时FM !
Enterprise PL / Ihas a ton of builtin functions to work with dates and times! |
|
回到顶部 |
|
 |
谢尔盖肯
活跃的成员

已加入:2008年4月29日 职位:941 所在地:马里兰
|
|
|
|
普里诺写道: |
您以及该线程中的其他每个人真正需要做的是 实时FM !
Enterprise PL / Ihas a ton of builtin functions to work with dates and times! |
没有内置函数,或者其他任何对编程没有一点了解的函数都可以提供帮助。 |
|
回到顶部 |
|
 |
普里诺 警告:1 高级会员

已加入:2009年2月7日 职位:1241 地点:立陶宛维尔纽斯
|
|
|
|
史蒂夫·迈尔斯写道: |
忘记使用此时间戳函数返回的字符串。我几乎可以肯定这是一个功能 您的 安装写道。 |
Nope, it's a standard PL / Ibuiltin function. |
|
回到顶部 |
|
 |
普里诺 警告:1 高级会员

已加入:2009年2月7日 职位:1241 地点:立陶宛维尔纽斯
|
|
|
|
尼克·克劳斯顿(Nic Clouston)写道: |
我将在CHAR(26)变量上定义一个结构,并将数字部分定义为PIC 9s,您可以在计算中直接使用这些结构,但是我会将其复制到FIXED DEC变量中。 |
编译器无论如何都将执行此操作,因此,除非您需要特定的精度,否则实际上不必自己执行此操作。 |
|
回到顶部 |
|
 |
|