RPGLE中获取日期时间值

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


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值