Working with ABAP date and time data types

Working with ABAP date and time data types

In this SAP Press book chapter excerpt, you'll find an introduction to SAP ABAP date and time data types. Read on to find strategies for creating calculations using the built-in date and time data, working with timestamps in ABAP and using the SAP Calendar.

Advanced ABAP operations with elementary data types

Working with ABAP date and time data types

Understanding ABAP programming bits and bytes

2.2 Date and Time Processing

Online transaction processing (OLTP) systems such as the ones that make up the
SAP Business Suite maintain quite a bit of time-sensitive data, so it’s important
that you understand how to work with the built-in date and time types provided
in ABAP. In the following subsections, we discuss these types and explain how to
use them to perform calculations and conversions.

    Requires Free Membership to View

    When you register, you will start receiving targeted emails from my award-winning team of editorial writers. Our goal is to keep you informed on the hottest topics and biggest challenges faced by SAP professionals today.

    Hannah Smalltree, Editorial Director

    By submitting your registration information to SearchSAP.com you agree to receive email communications from TechTarget and TechTarget partners. We encourage you to read our Privacy Policy which contains important disclosures about how we collect and use your registration and other information. If you reside outside of the United States, by submitting this registration information you consent to having your personal data transferred to and processed in the United States. Your use of SearchSAP.com is governed by our Terms of Use. You may contact us at webmaster@TechTarget.com.

 

2.2.1 Understanding ABAP Date and Time Types

ABAP provides two built-in types to work with dates and times: the D (date) data
type and the T (time) data type. Both of these types are fixed-length character types
that have the form YYYYMMDD and HHMMSS, respectively. In addition to these built-in
types, the ABAP Dictionary types TIMESTAMP and TIMESTAMPL are being used more
and more in many standard application tables, and so on, to store a timestamp in the
UTC format.1 Table 2.2 shows the basic date and time types available in ABAP.

1 The term “UTC” is an abbreviation for “Consolidated Universal Time,” which is a time standard
based on the International Atomic Time standard. UTC is roughly equivalent to the Greenwich
Mean Time standard (or GMT) which refers to the mean solar time at the Royal Observatory in
Greenwich, London. Collectively, these standards define a global time standard that can be used
to convert a given time to local time, and vice versa.

Data Type Description
D A built-in fixed-length date type of the form YYYYMMDD. For
example, the value 20100913 represents the date September
13, 2010.
T A built-in fixed-length time type of the form HHMMSS. For
example, the value 102305 represents the time 10:23:05 AM.
TIMESTAMP
(Type P –
Length 8
No decimals)
An ABAP Dictionary type used to represent short timestamps
in the form YYYYMMDDhhmmss. For example, the value
20100913102305 represents the date September 13, 2010 at
10:23:05 AM.
TIMESTAMPL
(Type P -
Length 11
Decimals 7)
An ABAP Dictionary type used to represent long timestamps
in the form YYYYMMDDhhmmssmmmuuun. The additional digits
mmmuuun represent fractions of a second.

Table 2.2 ABAP Date and Time Data Types

2.2.2 Date and Time Calculations

When you’re working with dates, you often need to perform various calculations
to compute the difference between two dates, make comparisons, or determine
a valid date range. As we mentioned in Section 2.2.1, Understanding ABAP Date
and Time Types, the built-in date and time types in ABAP are character types, not
numeric types. Nevertheless, the ABAP runtime environment allows you to perform
basic numeric operations on these types by implicitly converting them to
numeric types behind the scenes.

The code excerpt shown in Listing 2.3 demonstrates how these calculations work.
Initially, the variable lv_date is assigned the value of the current system date (e.g.,
the system field SY-DATUM). Next, we increment that date value by 30. In terms of
a date calculation in ABAP, this implies that we’re increasing the day component
of the date object by 30 days. Here, note that the ABAP runtime environment is
smart enough to roll over the date value whenever it reaches the end of a month,
and so on. In other words, you can rely on the system to ensure that you don’t
calculate an invalid date value (e.g., 01/43/2011).

DATA: lv_date TYPE d.
lv_date = sy-datum.
WRITE: / 'Current Date:', lv_date MM/DD/YYYY.

lv_date = lv_date + 30.
WRITE: / 'Future Date:', lv_date MM/DD/YYYY.

Listing 2.3 Performing Date Calculations in ABAP

Time calculations in ABAP work very similarly to the date calculations shown in
Listing 2.3. With time calculations, the computation is based upon the seconds
component of the time object. The code in Listing 2.4 shows how we can increment
the current system time by 90 seconds using basic time arithmetic.
DATA: lv_time TYPE t.
lv_time = sy-uzeit.
WRITE /(60) lv_time USING EDIT MASK
'The current time is __:__:__'.
lv_time = lv_time + 90.
WRITE /(60) lv_time USING EDIT MASK
'A minute and a half from now it will be __:__:__'.

Listing 2.4 Performing Time Calculations in ABAP

In addition to typical numeric calculations, you also have the option of working
with date/time fields using normal character-based semantics. For instance, you
can use the offset/length functionality to initialize date or time components. The
code excerpt in Listing 2.5 demonstrates how you can adjust the date 02/13/2003
to 01/13/2003 using offset/length semantics.

DATA: lv_date TYPE d VALUE '20030213'.
WRITE: / lv_date MM/DD/YYYY.
lv_date+4(2) = '01'.
WRITE: / lv_date MM/DD/YYYY.

Listing 2.5 Manipulating a Date Using Offset/Length Functionality

2.2.3 Working with Timestamps

If you’ve been working with some of the newer releases of the products in the
SAP Business Suite, you may have encountered certain applications that use the
TIMESTAMP or TIMESTAMPL data types to store time-sensitive data. As you can see in
Table 2.2, these ABAP Dictionary types store timestamps with varying degrees of
accuracy. Interestingly, though these types aren’t built-in types like D or T, ABAP
does provide some native support for them in the form of a couple of built-in statements.
In addition, SAP also provides a system class called CL_ABAP_TSTMP, which
can be used to simplify the process of working with timestamps. We investigate
these features in the following subsections.

\You can retrieve the current system time and store it in a timestamp variable using
the GET TIME STAMP statement whose syntax is demonstrated in Listing 2.6. The
GET TIME STAMP statement stores the timestamp in a shorthand or longhand format
depending upon the type of the timestamp data object used after the FIELD addition.
The timestamp value is encoded using the UTC standard.

DATA: lv_tstamp_s TYPE timestamp,
lv_tstamp_l TYPE timestampl.
GET TIME STAMP FIELD lv_tstamp_s.
WRITE: / 'Short Time Stamp:', lv_tstamp_s
TIME ZONE sy-zonlo.
GET TIME STAMP FIELD lv_tstamp_l.
WRITE: / 'Long Time Stamp: ', lv_tstamp_l
TIME ZONE sy-zonlo.

Listing 2.6 Using the GET TIME STAMP Statement

Looking at the code excerpt in Listing 2.6, you can see that we’re displaying the
timestamp using the TIME ZONE addition of the WRITE statement. This addition formats
the output of the timestamp according to the rules for the time zone specified.
In Listing 2.6, we used the system field SY-ZONLO to display the local time zone
configured in the user’s preferences. However, we could have just as easily used a
data object of type TIMEZONE, or even a hard-coded literal such as 'CST'.

Time Zones
For a complete list of time zones configured in the system, have a look at the contents
of ABAP Dictionary Table TTZZ.

 

Converting Timestamps

You can convert a timestamp to a date/time data object and vice versa using the
CONVERT statement in ABAP. Listing 2.7 shows the syntax used to convert a timestamp
into data objects of type D and T. The TIME ZONE addition adjusts the UTC
date/time value within the timestamp in accordance with a particular time zone.
Additionally, the optional DAYLIGHT SAVING TIME addition can be used to determine
whether or not the timestamp value happens to coincide with daylight savings
time. If it does, the lv_dst variable has the value 'X'; otherwise, it’s blank.

This feature can be helpful in differentiating between timestamp values that lie
within the transitional period between summer time and winter time.2

CONVERT TIME STAMP lv_tstamp TIME ZONE lv_tzone
INTO [ DATE lv_date ] [ TIME lv_time ]
[DAYLIGHT SAVING TIME lv_dst].

Listing 2.7 Syntax of CONVERT TIME STAMP Statement

Listing 2.8 shows how the CONVERT TIME STAMP statement is used to convert the
current system timestamp to date/time data objects using the local time zone.

TYPE-POOLS: abap.
DATA: lv_tstamp TYPE timestamp,
lv_date TYPE d,
lv_time TYPE t,
lv_dst TYPE abap_bool.

GET TIME STAMP FIELD lv_tstamp.
CONVERT TIME STAMP lv_tstamp TIME ZONE sy-zonlo
INTO DATE lv_date TIME lv_time
DAYLIGHT SAVING TIME lv_dst.

WRITE: / 'Today's date is: ', lv_date MM/DD/YYYY.
WRITE: /(60) lv_time USING EDIT MASK
'The current time is: __:__:__'.

IF lv_dst EQ abap_true.
WRITE: / 'In daylight savings time...'.
ELSE.
WRITE: / 'Not in daylight savings time...'.
ENDIF.

Listing 2.8 Converting Timestamps to Date/Time Objects

To create a timestamp using a date/time object, you can use the syntax variant of
the CONVERT statement shown in Listing 2.9. The date/time values are qualified
using the TIME ZONE addition so that the appropriate offsets can be applied as the
UTC timestamp is generated.

2 For a complete list of daylight savings time rules, have a look at the contents of the ABAP Dictionary table TTZDV.

CONVERT DATE lv_date
[TIME lv_time [DAYLIGHT SAVING TIME lv_dst]]
INTO TIME STAMP lv_tstamp TIME ZONE lv_tzone.

Listing 2.9 Syntax of CONVERT DATE Statement

The code excerpt in Listing 2.10 shows how the CONVERT DATE statement can be
used to generate a timestamp object from a date/time object.

TYPE-POOLS: abap.
DATA: lv_tstamp TYPE timestamp,
lv_date TYPE d,
lv_time TYPE t,
lv_dst TYPE abap_bool.

lv_date = sy-datum.
lv_time = sy-uzeit.

CONVERT DATE lv_date TIME lv_time
INTO TIME STAMP lv_tstamp TIME ZONE sy-zonlo.

WRITE: / 'Time Stamp Value:', lv_tstamp TIME ZONE sy-zonlo.

Listing 2.10 Creating a Timestamp from a Date/Time Object

CL_ABAP_TSTMP
+ ADD( )
+ SUBTRACT( )
+ SUBTRACTSECS( )
+ TD_ADD( )
+ TD_SUBTRACT( )
+ ISDOUBLEINTERVAL( )
+ SYSTEMTSTMP_SYST2LOC( )
+ SYSTEMTSTMP_LOC2SYST( )
+ SYSTEMTSTMP_UTC2SYST( )
+SYSTEMTSTMP_SYST2UTC( )
+ TD_NORMALIZE( )
+ NORMALIZE( )

Figure 2.4 UML Class Diagram for Class CL_ABAP_TSTMP

Timestamp Operations Using System Class CL_ABAP_TSTMP

Unlike the native D and T types, the ABAP runtime environment doesn’t have
built-in functionality to perform calculations on timestamps (e.g., add or subtract,
etc.). Instead, SAP provides a system class called CL_ABAP_TSTMP for this purpose.
Figure 2.4 contains a UML class diagram that shows the publicly available methods
provided in this class. As you would expect, there are various forms of ADD() and SUBTRACT() methods to perform timestamp calculations. In addition, a series of
conversion methods (e.g., SYSTEMTSTMP_SYST2LOC(), etc.) can be used to convert
a timestamp to various time zones, a Boolean method called ISDOUBLEINTERVAL()
can be used to determine if a timestamp is in daylight savings time, and a couple
of methods can be used to normalize a timestamp. Here, normalization implies that
an invalid time value such as 10:30:60 would be adjusted to the value 10:31:00.

In UML class diagram notation, methods that are underlined are defined as class
methods. Class methods can be invoked without first creating an instance of the
class in which they are defined, as evidenced in the code excerpt shown in Listing
2.11. Here, we’re using the class method ADD() to add 75 seconds to the current
system time.

DATA: lv_tstamp TYPE timestamp,
lv_date TYPE d,
lv_time TYPE t.

GET TIME STAMP FIELD lv_tstamp.
WRITE: / 'Time Stamp Value:', lv_tstamp TIME ZONE sy-zonlo.

TRY.
CALL METHOD cl_abap_tstmp=>add
EXPORTING
tstmp = lv_tstamp
secs = 75
RECEIVING
r_tstmp = lv_tstamp.
CATCH CX_PARAMETER_INVALID_RANGE.
CATCH CX_PARAMETER_INVALID_TYPE.
ENDTRY.

WRITE: / 'Time Stamp Value:', lv_tstamp TIME ZONE sy-zonlo.

Listing 2.11 Working with Timestamps Using CL_ABAP_TSTMP

The call signatures of most of the other methods in class CL_ABAP_TSTMP are similar
to the ADD() method demonstrated in Listing 2.11. For more details concerning the
functionality of particular methods in this class, see the class/method documentation
for this class in the Class Builder (Transaction SE24).

2.2.4 Calendar Operations

So far, our discussion on dates has focused on raw calculations and conversions. However, many typical use cases in the business world require that we look at
dates from a semantic point of view. For example, you might ask whether or
not the date 1/13/2010 is a working day, or whether 4/4/2010 is a holiday. The
answers to these kinds of questions require the use of a calendar. Fortunately, SAP
provides a very robust set of calendaring features straight out of the box with SAP
NetWeaver AS ABAP.

The SAP Calendar is maintained in a client-specific manner inside the SAP Customizing
implementation guide (Transaction SPRO ). Depending on how your system
is set up, you might have a project-specific implementation guide. However, for
the purposes of this discussion, we assume that you’re using the default SAP Reference
Implementation Guide (IMG). You can access this guide by clicking on the
button labeled SAP Reference IMG on the initial screen of Transaction SPRO (see
Figure 2.5).

Figure 2.5 Initial Screen of Transaction SPRO

Inside the SAP Reference IMG, you can fi nd the SAP Calendar under the navigation
path SAP NetWeaver • General Settings • Maintain Calendar (see Figure 2.6).

Figure 2.6 Navigating to the SAP Calendar in the IMG

Figure 2.7 shows the main menu of the SAP Calendar transaction . From here, you
can configure subobjects such as public holidays, holiday calendars, and factory
calendars. By default, an SAP NetWeaver system comes preconfigured with some
typical settings in these subareas. However, you’re also free to create customized
holidays and calendars as needed.

Figure 2.6 Navigating to the SAP Calendar in the IMG

Figure 2.7 Maintaining the SAP Calendar in the IMG

After the SAP Calendar is confi gured properly, you can use this data to perform
various types of calculations. Table 2.3 shows some useful function modules that
leverage this data to determine whether or not a given date is a working day, holiday,
and so on. You can fi nd out more information about these function modules
in the documentation provided for each module in the Function Builder (Transaction
SE37).

Function Name Description
DATE_COMPUTE_DAY Computes the day of the week for a given
date. Day values are calculated as 1 (Monday),
2 (Tuesday), and so on.
DATE_COMPUTE_DAY_ENHANCED Computes the day of the week just like DATE_
COMPUTE_DAY; also returns the day value as
text (e.g., TUESDAY, etc.).
DATE_CONVERT_TO_FACTORYDATE Calculates the factory date value for a given
date. Also provides an indicator that confirms
whether or not the given date is considered a
working day according to the selected factory
calendar.
DATE_GET_WEEK Determines the week of the year for the given
date. For example, the date 9/13/2010 would
be the 37th week of the year 2010.
FACTORYDATE_CONVERT_TO_DATE Converts a factory date value back into a date
object.
HOLIDAY_CHECK_AND_GET_INFO Tests to determine whether or not a given date
is a holiday based on the configured holiday
calendar.
WEEK_GET_FIRST_DAY Calculates the first day of a given week.

Table 2.3 Useful Date Functions in Function Group SCAL

 


This was first published in November 2010

Join the conversationComment

Share
Comments

    Results

    Contribute to the conversation

    All fields are required. Comments will appear at the bottom of the article.