18
Thu, Apr
5 New Articles

TechTip: Are You Timing Your Dates Correctly?

RPG
Typography
  • Smaller Small Medium Big Bigger
  • Default Helvetica Segoe Georgia Times

UDATE may not be the right way to get the current date, but old habits are hard to break.

 

When you need to put a date and a time together in your RPG IV program, be sure you understand how to use UDATE, *DATE, the TIME opcode , %DATE, %TIME, and %TIMESTAMP.

History of UDATE Misuse

In early versions, RPG provided the UDATE reserved word as an easy way to refer to the six-digit job date. The vast majority of RPG date code I have run into revolves around UDATE, and I expect this holds true in many shops. UDATE makes it really simple to put a date in a report heading or on a display screen. *DATE is a reserved word in later RPG versions that provides similar simplicity with an eight-digit date.

 

Where some developers ran into trouble was when they needed to put a date and a time together. In my experience, this most frequently occurred when time-stamping a database record, but also occasionally in report headings or on display screens. Historically, database timestamps consisted of two fields: a date field and a time field. Most of the existing code to create these two fields works most of the time, but every now and then the operational environment changes and the results are just plain wrong.

 

Given that IBM provided the UDATE reserved word to return the job date and that you could code *DATE and *TIME in display files, it seemed logical to assume that there would be a UTIME reserved word to return the time. There wasn't. The closest most developers could come was the TIME opcode. It was still quite easy to use UDATE to set the date and the TIME opcode to set the time. And therein was the crux of the problem, because this date and time combination is inherently dangerous.

 

What many failed to consider is that the value returned by UDATE or *DATE is static. The IBM manuals are quite clear that UDATE and *DATE access the Job date (so do UMONTH, UDAY, UYEAR, *MONTH, *DAY, and *YEAR). The Job date is the date the job started running, and while the job exists, it does not change.

 

In contrast, the TIME opcode and the %DATE, %TIME, and %TIMESTAMP BIFs return dynamic data from the system clock. Time values are always changing, and the date value changes at midnight.

 

Pairing an unchanging Job date with a changing time works in most situations. As long as the job does not continue running past midnight, you get valid date and time combinations. However, once the job runs past midnight, timestamps suddenly appear to have jumped back 24 hours.

A Recent Bad Example

This recently came to my attention and provoked this article. The shop floor in a local company runs two shifts five days a week from 7:30 a.m. to 11:30 p.m. There are 5250 devices all over the place, and the floor manager gets production statistics from the transactions that track items through the systems. Recently, they had to work an extra four-hour Saturday shift. While this was an exciting change in today's economic climate, the overtime caused the floor manager's budget to be closely scrutinized. The following week, he found his productivity reports didn't make sense. It looked like an enormous amount of overtime work had been done on Saturday and productivity on Monday was way down.

 

It turned out the code that puts the timestamps in the transactions uses the UDATE and TIME opcode combination.

 

The floor workers sometimes (often?) forget to end their 5250 sessions, so the regular Monday through Friday day-end process always ends the QINTER subsystem at 11:45 p.m. The regular day-end process doesn't run on Saturday or Sunday, so some 5250 sessions that started on Saturday morning were still running on Monday morning at 7:30 a.m. and continued running until QINTER was ended at 11:45 p.m. on Monday evening. An interactive 5250 session, from sign-on to sign-off, is a single job, so some of these sessions had a job date that remained constant--with Saturday's date--until the day-end process on Monday. Many of the transactions that occurred on Monday had a Saturday timestamp. Hence the discrepancy, the floor manager's annoyance, the IT department's embarrassment, and a significant amount of wasted time chasing down the problem.

 

Maybe QINTER should be brought down every evening. Maybe inactive 5250 sessions should time out after eight hours. Maybe there are other ways to stop jobs running over midnight.

 

Nevertheless, with RPG IV, it is a trivial effort to create timestamps that will always be correct, regardless of when the job starts or how long it runs, so there is no excuse for timestamp code that doesn't work all the time.

When to Use UDATE

Use UDATE with the clear understanding that it might not be the current date. It might be the prior day if the job started before midnight. It might be almost any date if the job was submitted with a DATE(newdate) parameter, or the job itself may have issued a CHGJOB DATE(newdate) command.

 

If you want the current date, use %DATE(), recognizing that this really is the current date and it changes at midnight. For example, you probably don't want to code a page header routine that issues %DATE() for every new page, because if the program runs over midnight, you will get a new date after midnight. Instead, just code %DATE() once during program initialization.

When Not to Use UDATE

Do not use UDATE when you want to pair a date with a time. If you are designing a new system with a timestamp in the records, consider using a field with a timestamp data type, type Z. Populate it with the %TIMESTAMP() BIF.

 

If you are working with a legacy system that has separate date and time fields for the time stamp, use code like this:

 

D TS              s               z

/FREE

TS = %timestamp();

CHGDTE = %dec(%date(TS):*YMD);

CHGTME = %dec(%time(TS):*HMS);

 

Granted, you could just use %DATE() followed by %TIME(), but there is a remote chance that the system clock could roll to the next day between the two instructions.

 

(If you need help working with legacy dates, see "RPG IV Legacy Dates Cheat Sheet.")

Conclusion

UDATE isn't inherently evil. Just be sure you understand what it reflects when you use it, and seriously consider using a BIF when there is a time involved.

 

 

Sam Lennon

Sam Lennon is an analyst, developer, consultant and IBM i geek. He started his programming career in 360 assembly language on IBM mainframes, but moved to the AS400 platform in 1991 and has been an AS400/iSeries/i5/IBM i advocate ever since.

BLOG COMMENTS POWERED BY DISQUS

LATEST COMMENTS

Support MC Press Online

$0.00 Raised:
$

Book Reviews

Resource Center

  • SB Profound WC 5536 Have you been wondering about Node.js? Our free Node.js Webinar Series takes you from total beginner to creating a fully-functional IBM i Node.js business application. You can find Part 1 here. In Part 2 of our free Node.js Webinar Series, Brian May teaches you the different tooling options available for writing code, debugging, and using Git for version control. Brian will briefly discuss the different tools available, and demonstrate his preferred setup for Node development on IBM i or any platform. Attend this webinar to learn:

  • SB Profound WP 5539More than ever, there is a demand for IT to deliver innovation. Your IBM i has been an essential part of your business operations for years. However, your organization may struggle to maintain the current system and implement new projects. The thousands of customers we've worked with and surveyed state that expectations regarding the digital footprint and vision of the company are not aligned with the current IT environment.

  • SB HelpSystems ROBOT Generic IBM announced the E1080 servers using the latest Power10 processor in September 2021. The most powerful processor from IBM to date, Power10 is designed to handle the demands of doing business in today’s high-tech atmosphere, including running cloud applications, supporting big data, and managing AI workloads. But what does Power10 mean for your data center? In this recorded webinar, IBMers Dan Sundt and Dylan Boday join IBM Power Champion Tom Huntington for a discussion on why Power10 technology is the right strategic investment if you run IBM i, AIX, or Linux. In this action-packed hour, Tom will share trends from the IBM i and AIX user communities while Dan and Dylan dive into the tech specs for key hardware, including:

  • Magic MarkTRY the one package that solves all your document design and printing challenges on all your platforms. Produce bar code labels, electronic forms, ad hoc reports, and RFID tags – without programming! MarkMagic is the only document design and print solution that combines report writing, WYSIWYG label and forms design, and conditional printing in one integrated product. Make sure your data survives when catastrophe hits. Request your trial now!  Request Now.

  • SB HelpSystems ROBOT GenericForms of ransomware has been around for over 30 years, and with more and more organizations suffering attacks each year, it continues to endure. What has made ransomware such a durable threat and what is the best way to combat it? In order to prevent ransomware, organizations must first understand how it works.

  • SB HelpSystems ROBOT GenericIT security is a top priority for businesses around the world, but most IBM i pros don’t know where to begin—and most cybersecurity experts don’t know IBM i. In this session, Robin Tatam explores the business impact of lax IBM i security, the top vulnerabilities putting IBM i at risk, and the steps you can take to protect your organization. If you’re looking to avoid unexpected downtime or corrupted data, you don’t want to miss this session.

  • SB HelpSystems ROBOT GenericCan you trust all of your users all of the time? A typical end user receives 16 malicious emails each month, but only 17 percent of these phishing campaigns are reported to IT. Once an attack is underway, most organizations won’t discover the breach until six months later. A staggering amount of damage can occur in that time. Despite these risks, 93 percent of organizations are leaving their IBM i systems vulnerable to cybercrime. In this on-demand webinar, IBM i security experts Robin Tatam and Sandi Moore will reveal:

  • FORTRA Disaster protection is vital to every business. Yet, it often consists of patched together procedures that are prone to error. From automatic backups to data encryption to media management, Robot automates the routine (yet often complex) tasks of iSeries backup and recovery, saving you time and money and making the process safer and more reliable. Automate your backups with the Robot Backup and Recovery Solution. Key features include:

  • FORTRAManaging messages on your IBM i can be more than a full-time job if you have to do it manually. Messages need a response and resources must be monitored—often over multiple systems and across platforms. How can you be sure you won’t miss important system events? Automate your message center with the Robot Message Management Solution. Key features include:

  • FORTRAThe thought of printing, distributing, and storing iSeries reports manually may reduce you to tears. Paper and labor costs associated with report generation can spiral out of control. Mountains of paper threaten to swamp your files. Robot automates report bursting, distribution, bundling, and archiving, and offers secure, selective online report viewing. Manage your reports with the Robot Report Management Solution. Key features include:

  • FORTRAFor over 30 years, Robot has been a leader in systems management for IBM i. With batch job creation and scheduling at its core, the Robot Job Scheduling Solution reduces the opportunity for human error and helps you maintain service levels, automating even the biggest, most complex runbooks. Manage your job schedule with the Robot Job Scheduling Solution. Key features include:

  • LANSA Business users want new applications now. Market and regulatory pressures require faster application updates and delivery into production. Your IBM i developers may be approaching retirement, and you see no sure way to fill their positions with experienced developers. In addition, you may be caught between maintaining your existing applications and the uncertainty of moving to something new.

  • LANSAWhen it comes to creating your business applications, there are hundreds of coding platforms and programming languages to choose from. These options range from very complex traditional programming languages to Low-Code platforms where sometimes no traditional coding experience is needed. Download our whitepaper, The Power of Writing Code in a Low-Code Solution, and:

  • LANSASupply Chain is becoming increasingly complex and unpredictable. From raw materials for manufacturing to food supply chains, the journey from source to production to delivery to consumers is marred with inefficiencies, manual processes, shortages, recalls, counterfeits, and scandals. In this webinar, we discuss how:

  • The MC Resource Centers bring you the widest selection of white papers, trial software, and on-demand webcasts for you to choose from. >> Review the list of White Papers, Trial Software or On-Demand Webcast at the MC Press Resource Center. >> Add the items to yru Cart and complet he checkout process and submit

  • Profound Logic Have you been wondering about Node.js? Our free Node.js Webinar Series takes you from total beginner to creating a fully-functional IBM i Node.js business application.

  • SB Profound WC 5536Join us for this hour-long webcast that will explore:

  • Fortra IT managers hoping to find new IBM i talent are discovering that the pool of experienced RPG programmers and operators or administrators with intimate knowledge of the operating system and the applications that run on it is small. This begs the question: How will you manage the platform that supports such a big part of your business? This guide offers strategies and software suggestions to help you plan IT staffing and resources and smooth the transition after your AS/400 talent retires. Read on to learn: