RPGLE中获取日期时间值

来源:互联网 发布:matlab和java 编辑:程序博客网 时间:2024/05/18 19:42

获取时间和日期值,使用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里面的记录。