Fun With Dates In RPGLE
RPGLE提供了许多有关日期数据格式的用法,下面对这些日期的用法进行了一下汇总。
[b:2ffd804c3d]1.Built in functions used with date processing[/b:2ffd804c3d]
%MSeconds Retrieve milliseconds from formatted date
%Seconds Retrieve seconds from formatted date
%Minutes Retrieve minutes from formatted date
%Hours Retrieve hours from formatted time
%Days Retrieve days from formatted date
%Months Retrieve months from formatted date
%Years Retrieve years from formatted date
%Date Retrieve the date
%Time Retrieve the time
%TimeStamp Retrieve a time stamp
%Subdt Substring year, month or day from formatted date
%Char Use a decimal field in a substring function
2.[b:2ffd804c3d]Define Date Variables All date formats[/b:2ffd804c3d]
without keyword DatFmt will default to *ISO. 2003-09-23
When you initialize a date field you must prefix the date with the letter "D" ,see below.
[code:1:2ffd804c3d]D*---------------------------------------------------------
D* Field Definitions.
D*---------------------------------------------------------
D ISOdate S D
D USAdate S D DatFmt(*USA)
D XMASDate S D Inz(D2003-12-25)
[/code:1:2ffd804c3d]
[b:2ffd804c3d]3.Various types of Date data format[/b:2ffd804c3d]
[code:1:2ffd804c3d]*-----------------------------------------------------------
* RPG-defined date formats and separators for Date data type
*-----------------------------------------------------------
* 2-Digit Year Formats
* *MDY Month/Day/Year mm/dd/yy 8 09/26/03
* *DMY Day/Month/Year dd/mm/yy 8 26/09/03
* *YMD Year/Month/Day yy/mm/dd 8 03/09/26
* *JUL Julian yy/ddd 6 03/926
*----------------------------------------------------------
* 4-Digit Year Formats
* *ISO Int Standards Org yyyy-mm-dd 10 2003-09-26
* *USA IBM USA Standard mm/dd/yyyy 10 09/26/2003
* *EUR IBM European Std dd.mm.yyyy 10 26.09.2003
* *JIS Japan Indst Std yyyy-mm-dd 10 2003-09-26
*
*
*----------------------------------------------------------[/code:1:2ffd804c3d]
[b:2ffd804c3d]4.Use dates in RPGLE[/b:2ffd804c3d]
First get current date in ISO date format
(without DATFMT or DATEDT keyword in control specification)
[code:1:2ffd804c3d]C Eval ISOdate = %Date()[/code:1:2ffd804c3d]
Then,move this date to a decimal 8,0 field
the date is now in format 20030926
[code:1:2ffd804c3d] C Move ISODate Decimal8 8 0[/code:1:2ffd804c3d]
Now lets add 1 month to the date.
date after will equal 2003-10-26
%days and %years works the same as %months
[code:1:2ffd804c3d] C Eval WorkISO = ISODate + %Months(1)[/code:1:2ffd804c3d]
Logon date is set equal to today then the month is extracted
the "*M" is the same as "*Months" LogMonth = 09.
LogDay = 26.
[code:1:2ffd804c3d]C Eval LogonDate = %Date()
C Extrct LogonDate:*Y LogYear
C Extrct LogonDate:*M LogMonth
C Extrct LogonDate:*D LogDay[/code:1:2ffd804c3d]
Build the date string - Later we will add the day name
[code:1:2ffd804c3d]D MonthNames S 12 Dim(12) CtData
C Eval Date_String =
C %Trim(MonthNames(LogMonth))
C + %trim(@) + %Trim(LogDay)
C + %trim(,@) + %Char(LogYear)
C*----------------------------------------------------
** CTDATA MonthNames
January
February
March
April
May
June
July
August
September
October
November
December[/code:1:2ffd804c3d]
convert the "@" back to *Blanks
Date_String = September 26, 2003
[code:1:2ffd804c3d]C @: Xlate Date_String Date_String
*
* TimeStamp = yyyy-mm-dd-hh.mm.ss.mmmmmm (length 26).
* TimeStamp = 2003-09-26-15.16.26.531000
*
C Eval TimeStamp = %TimeStamp()
*
* Free Format date stuff By the way Name2 = Friday
*
/Free
DateIn = %Date() ;
ISODate = %Date() ;
ISODate = DateIn ;
Year = %Subdt(ISODate:*Y) ;
Month = %Subdt(ISODate:*M) ;
Day = %Subdt(ISODate:*D) ;
FromISO = ISODate - %YEARS(1) ;
ToISO = ISODate ;
DiffDays = %Diff(ToISO:FromISO:*DAYS) ;
ISODate = DateIn ;
WorkField = %Diff(ISODate:D1899-12-31:*DAYS);
WorkField = %REM(WorkField:7);
NamePtr = NamePtr + (WorkField * 9);
Name2 = Name;
/End-Free
*
* Build the date string - With The Day Name
* DATE_STRING = Friday September 26, 2003
*
C Eval Date_String =
C %trim(Name) + %Trim(@@)
C + %trim(MonthNames(LogMonth))
C + %trim(@) + %Trim(LogDay)
C + %trim(,@) + %Char(LogYear)
C Eval Date_String = %Xlate(@: :Date_String)
*
* Calculate the last day of the month
* ENDOFMONTH = 2003-09-30
*
C ISODate AddDur 1:*Months NextMonth
C Extrct NextMonth:*D DiffDays
C NextMonth SubDur DiffDays:*D EndOfMonth
C Eval *INLR = *On
[/code:1:2ffd804c3d]
| yoyoage 回复于:2004-01-31 09:53:03 |
| 另外,日期格式之间可以相互转换
[code:1:ee07bc1a65]/free // Convert Date from ccyymmdd to mmddyy Sdt = %uns(%char(%Date(#SoSdt:*Iso):*Mdy0)); // Todays Date in Ccyymmdd format Today = %uns(%char(%Date():*Iso0)); // Convert From Julian to ccyymmdd CbpPayDte = %Dec(%Char(%Date(%Subst(%Editc(Rpdgj:X):2:5) :*Jul0):*Iso0):8:0); [/code:1:ee07bc1a65] |
| andrewleading_he 回复于:2004-01-31 10:08:01 |
| 不错,有机会试试看!帮忙顶一下! |
| huim 回复于:2004-01-31 20:44:50 |
| 好贴 |
| 红像 回复于:2004-02-02 09:15:03 |
| Great~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| yj2yq 回复于:2004-02-02 16:27:01 |
| 精彩! |
| yoyoage 回复于:2004-02-02 19:58:17 |
| 另外还补充一下SQLRPGLE中的日期函数用法:
SQLRPGLE中,有下面这些可用的日期函数: DATE DAY DAYS DAYOFMONTH DAYOFWEEK DAYOFWEEK_ISO DAYOFYEAR 例如: SELECT Item, Date(Days(SUBSTR(CHAR(MFDATE),1,4)||-|| SUBSTR(CHAR(MFDATE),5,2)|| -|| SUBSTR(CHAR(MFDATE),7,2)) + EXPIRE) FROM ITEMMASTER MFDATE是YYYYMMDD格式的数据,存放生产日期 EXPIRE存放产品的生命周期,用天数表示。 DAYS函数可用于数字或者字符型,按照YYYY-MM-DD的格式计算天数。 |
最热门文章推荐:
>· voip电话
>· voip方案
>· voip系统
>· voip市场
>· 免费voip
>· voip网络
>· voip组网
>· 腾讯rtx
下一篇:as400 I/O 错误小结
↓相关文章:
- · as400 I/O 错误小结
- · 我想用ORACLE取AS400的数据,有没有与这个类似的培训!
- · 400中显示在线用户操作记录的方法(用User Space API 实现)
- · 在rpg 里如何对开关进行重命名?
- · AS400 上部署 J2EE 的另一选择-- JBOSS !
- · 问个关于系统MSG的问题?
- · The OS400 Command interface is EXCELLENT, but coukd be impro
- · 帮忙解释安全文档里的一句话
- · 定时启用禁用用户登陆系统的方法
- · 如何更改logon on screen?
- · 跟踪IPL全程、并将产生的spoolfile转成PC上的文本文件,一气呵成.
- · AS400上的FTP可以限制那些用户不能登陆吗?
- · 如何從 AS/400 啟動 PC 程序或 從 PC 啟動 AS/400 程序?
- · 得到4位表示 年份 的新方法?
- · V5R3 CL Programming
- · 原创:建立QINTER外可用于交互式访问的独立子系统
- · hanyu看过来,24小时交易的AS/400如何备份?
- · 磁带放进去就弹不出来三个指示灯一会全亮着
- · 【探讨】如何使用Notes与其它关系数据库进行信息交互?
- · 【探讨】如何限制Notes用户邮箱大小?
- · Some info on AS/400 V5R3
- · iSeries课程学习导航图,给您指引学习或者培训方向。
- · 很菜的问题
- · 关于数据库文件的UC控制的问题
- · 转 Commit/Rollback概念
- · 有倒序排列的KEY值时的SETLL和SETGT
- · 大家帮忙来找茬(到底RPG程序错在哪?)
- · 讨论:关于创建obj时的参数--share
- · 帮忙看看这段程序的问题出在哪里?
- · 《最后100天的AS400学习心情笔记》
- · 在一个PF中加一字段,用来表示记录的序号!
- · SLR60磁带机可以做200GB系统的全系统备份,何故?
- · 讨论系统设备的异动监控
- · 求助:存储过程的查找和COPY
- · 【步骤】使用SQL DTS功能实现从DB/2向SQL Server传输数据.
- · 请教:如何修改PF文件的CCSID值?
- · 关于触发器的初级问题,请用过的大虾指教
- · 如何使用FTP在PC和AS/400之间传输包含中文的文件
- · 各位前辈,小女子是400初学之初学
- · (原)在as400上更换硬盘
- · pcom各种版本的问题总结
- · (如何在iSeries(AS/400)將资料加密(ZT)
- · 急等 如何更改as/400 V4R5 如何更改IP地址
- · 通过Navigator配置实现PC端拨号登陆远程AS/400.
- · 高版本安全数据向低版本系统迁移问题
- · as400与windows如何互相传送文件
- · 【分享】如何实现直接从AS/400发送信息到指定的邮箱.
- · rpg的小问题谁能解决一下,先谢了!(新手)
- · CA连接不上,PCOMM正常使用,授权及网络正常。什么问题?
- · exfmt与write的区别
- · 在TCPIP基础上建立APPC连接
- · 硬盘利用率的问题
- · 如何利用RPG,CL和ACCESS制作一个条形码标签的打印程序?
- · domino的邮件问题 急! (居士快进)
- · 请教400上的文件问题
- · 如何用PC超级终端对RS6000完成控制及安装(希望是我的精品)
- · (原创) 7133-T40阵列故障解决实例
- · 又来临时抱佛脚了,请教s7a电源问题
- · 经验交流<如何在AIX下面更改before login banner>
- · 刚完成的一个hacmp 5.1 +db2 udb 8.1 ese环境下的HA配置!
- · [原创]SNORT&ACID install on AIX 5.2
- · 一光纤卡的问题的解决,有类似问题的可以参考
- · 使用SFU实现Windows和AIX文件共享-请求加精
- · ORACLE/RAC安装完全攻略
- · Step bye Step for Install the Domino server 7 on aix 5L 5.2
- · 199学习笔记(chap11)
- · 在cp时的怪问题
- · 一个系统频繁宕机(888 102 300 0C0)的案例分析与解决!!!
- · 个人总结-理解和使用aix的日志系统
- · VIO配置1
- · IY19375补丁打不上。-_-!!!
- · 老的文章不一定就没有用处了:)
- · 任何在aix下面看你的系统是32位还是64位的
- · 吃了一个“螃蟹”
- · 监视别人在登录后都输入了什么命令
- · Securing AIX 5L from Scratch
- · 如何确定pSeries和RS/6000 CPU的主频?
- · .kshrc的作用
- · AIX 5.2对用户登录界面的安全性的增强
- · 更改HACMP环境里网卡的ip地址

