获取时间和日期值,使用oracle的话,直接:select sysdate from dual就可以取到了,或者获取时间戳timestamp,然后使用字符串截取函数substr截取日期或者时间部分。
RPGLE中,有两种方法获取时间和日期值。1.使用系统函数%XXX,2使用TIME操作码,实例如下:
FMOVETST01 UF A E DISK
DSEQCLB S 5A
DV_STR S 5A
DV_INT S 5S 0
C*程序控制
C EXSR @MAIN
C EXSR @EXIT
C*主控
C @MAIN BEGSR
C*取数据域里面的数据
C *DTAARA DEFINE SEQCLB
C *LOCK IN SEQCLB
C EVAL SEQCLB = %CHAR(%INT(SEQCLB)+1)
C*然后将其写回数据域
C OUT SEQCLB
C*将数据域里面的数据作为序列值放入物理文件字段SEQCOL中
C EVAL V_INT = %INT(SEQCLB)
C MOVE V_INT V_STR
C EVAL SEQCOL = V_STR
C*
C*获取当前时间戳,日期,时间
C*使用系统函数获取,日期和时间值与时间戳的日期和时间部分相同
C*当调用程序的时候,那个时间点已经确定,斜面两种方法得到的值同
C*1.先获取时间戳,然后再利用%SUBST截取日期和时间部分
C*2.分别使用函数获取
C*
C EVAL TIMSTMP = %TIMESTAMP()
C EVAL DTA = %DATE()
C EVAL TIM = %TIME()
C*日期和时间的获取,TIME操作码
C*TIME将时间或者日期赋值给对应的时间或者日期类型变量
C* TIME DTA
C* TIME TIM
C*
C*
C*将时间戳转换为字符
C*时间戳的长度为26
C EVAL DTCHAR = %CHAR(TIMSTMP)
C*写入物理文件:MOVETST01
C WRITE RMVTST
C
C ENDSR
C*退出程序
C @EXIT BEGSR
C EVAL *INLR = '1'
C RETURN
C ENDSR
这里使用到了数据域,实现字段的自动增长。oracle里面实现自动增长可以使用序列sequence,db2里面也有sequence,功能与oracle相同。
在db2 for system i里面,数据域的一个作用就是实现字段的自动增长。
上面使用数据域的这种方法中,一定要在程序中定义一个与数据域同名,同类型的变量,这里我个数据域初始数据位0。
*LOCK IN SEQCLB:读取数据域中的值;
OUT SEQCLB:向数据域中写入数据。
取出数据域中的数据之后,我先将其转换为数值型数据,然后再move到一个指定长度的变量中。
RPGLE中的move操作码有着强大的数据类型转换功能,这里当我将数字1move到长度为5的字符型变量中之后,得到的字符为00001,空白处补0。
move是右对其,movel操作时左对齐。下面是写入到物理文件MOVETST01里面的记录。