Show
all
Process Commander employs sophisticated representations and processing
of dates and times. The internal and external representations of dates
and times are important to understand, and some care is needed when both
designing applications and building applications that use dates, times,
and date or time calculations.
Introduction
A single Process Commander application can be deployed worldwide.
The system can have:
- Multiple server nodes operating in different time zones
- Users who access servers located in different time zones and
different locales from where they work
- Multiple databases, which can be located in different time
zones than the users or servers
- Multiple, application-specific work calendars with different
hours, days of the workweek, and holidays
- Interfaces to and from external databases or systems that
expect many different date or time formats
To support varied needs, three different types are available for
properties:
Date
— A day of the Gregorian calendar,
without reference to a time zone or locale. The unit is a whole
day, such as July 23, 2006.
TimeofDay
— A time of day, without reference
to a time zone or locale. The unit is seconds, such as 15 seconds
after 1:25 P.M.
DateTime
— A date and time, stored
internally to the millisecond if available, in a known time zone.
For example 15.452 seconds after midnight on July 23, 2006 in
London, U. K.
When presented with a DateTime
value, a corresponding
date and a time-of-day (in a specified time zone) can be
determined.
However, the converse is not usually true: when starting with a
Date
and a TimeofDay
value, multiple
differing but "correct" DateTime
values can be
constructed, depending on assumptions about time zone, Daylight
Savings Time, and other considerations. For example, when the date is
January 1 in London, it can be December 31 in New York.
Likewise, when comparing two values, or computing with dates,
times, and DateTime
values, context is important. A time
of 6:15 P.M. in London is earlier, not later, than 6:16 P.M. in New
York.
Different languages and locales use different formats to present
dates and times; Process Commander supports many output and import
formats while using only three property types: Date
,
TimeofDay
, and DateTime
.
The internal
representations
The internal representations are efficient for sorting and
comparisons and Java operations, but may not be familiar to business
users:
- The internal representation of a
Date
value is
eight digits in the format YYYYMMDD, for example 20061215 for
December 15, 2006.
- The internal representation of
Time of Day
value
is six digits in the format HHMMSS, where the hours portion ranges
from 00 to 23. For example, 153025 represents 25 seconds after 3:15
P.M.
- For
DateTime
values, the internal representation
has the format YYYYMMDDTHHMMSS.QQQ GMT where T and GMT are
literal characters, YYYY represents a year, MM is a month, DD is a
day, HH is an hour value between 00 to 23, MM is a minute value
between 00 and 59, SS is a second value between 00 and 59, and QQQ
is a millisecond value between 000 and 999. (The pattern character
Z — for Zulu time — sometimes appears rather than the
time zone characters GMT in some descriptions. The value always
contains a space followed by the three letters GMT.)
Entering date and
time constants (developer)
When a developer enters a value corresponding to a Time of
Day
or DateTime
into a rule form, no format
conversion occurs, but certain shortcuts are available.
Date values
You can enter a date using either two or four digits for the year.
If the year contains two digits, the system uses an algorithm to
determine a "reasonable" century based on the current date.
During 2006, the system prefers dates between 1997 and 2097.
Examples:
A property of type Date
can
have a null value. For example, if you use the Property-Set method to
set a Date
type value from a Text
value that
is null, the result is null. However, the Java Date operations convert
an integer value of 0 to the date 19700101 (January 1, 1970). This
Date
value may result when Process Commander evaluates
expressions that internally use the Java Date operations. VAGUE
Clinic 1/12/06 OLSOK.
TimeofDay values
To enter a constant TimeofDay
value into a rule form,
enter either all six digits or omit the seconds portion. For
example:
DateTime values
When entering a DateTime
value, you can omit all the
characters after the T, or omit the period and the millisecond values.
If the year contains two digits, the system uses an algorithm to
determine a "reasonable" century based on the current date.
During 2006, the system prefers dates between 1997 and 2097. If you
omit the time zone, the date and time are converted from the current
server time zone to the GMT time zone by adding or subtracting hours.
Examples:
Date constants
When entering a Date
literal constant as an entire
expression, be sure to include double quotes, to distinguish:
"20061215"
the date December 15, 2006 from:
20061215
an integer that is converted to 20,061,215.
Entering date and
time constants (application user)
Entering and presenting values in an application context
Process Commander supports dozens of formats that your application
can choose to present dates and times in ways familiar to application
users. The formats that apply in specific cases depend on the control rule (Rule-HTML-Property rule type) associated
with the property or the form and the locale.
Many formats are locale-specific, changing automatically based on
the value set on each user's Windows workstation, or the locale of
a user, as recorded in the Operator ID data instance.
For example, the date 20061215 can appear as any of the
following:
12/15/06
15/12/06
December 15, 2006
15 décembre 2006
Similarly, many different formats and shortcuts are available for
input. These date and time formats are based on version 1.3 of the
Unicode Common Locale Data Repository (CLDR). PROJ-546
Time zone and Daylight Savings Time conversions
The boundaries of time zones change from time to time. In addition,
the Energy Policy Act of 2005 changes the starting and ending dates
for Daylight Savings Time in most of the United States, starting in
2007.
V5.3 uses the time zones provided by the JVM on which it runs. The
JVM typically uses data provided by the Olson TZ database. Details on
this database are available from ftp://elsie.nci.nih.gov/pub.
Daylight savings time rules are supplied by
Java JDK vendors. In a multinode system, it is important that the same
rules are installed on each node. For specifics on Sun Microsystems
JDKs, see Pega Developer Network article PRKB-21247: Platform Bulletin: Sun JVM Issues. For
details of vendor JDK support of daylight savings time and downloads,
consult one of the following links:
http://www-128.ibm.com/developerworks/java/jdk/dst/
http://java.sun.com/javase/tzupdater_README.html
http://www.hp.com/products1/unix/java/TZupdater_license.html
http://edocs.bea.com/jrockit/geninfo/diagnos/tzupdate.html OK 1/28/09
Testing input and output formats
To see the effect of a specific control rule on input and
output formats for a property:
- Open the Property form.
- Click the Preview toolbar button ().
- Enter a value into the Input field. Click
Show
output .
The Locale Settings tool is useful in understanding the effect of
locales on date and time formats. See About the Locale Settings
tool.
Converting or
comparing a DateTime value to a Date value
PRKB-19983 The first eight characters of a
DateTime
value match the structure of a Date
value, that is YYYYMMDD, for example 20060930. Accordingly, a simple
way to compare a Date
value with a DateTime
value is to first select a substring of the DateTime
value, consisting of the initial eight characters. Both values then
have a common string format and length, and a normal string comparison
works.
For example, the Property-Set method "converts" a
DateTime
value to a Date
value by selecting
the first eight characters: PRKB-24087
When the DateTime
value is 20071201T011532.006 GMT,
the resulting value for the Date
property MyDate is
20070120.
However, this approach ignores the time zone information in the
DateTime
value, because the Date
value
conveys no time zone.
Use the standard function rule:
@FormatDateTime(.pyExpireDateTime,
"yyyyMMdd", "", "")
to convert a DateTime
value to a Date
value, in the time zone of the Process Commander server.
Avoid using Date
property types
in persistent objects, such as work objects or assignments, even if
your application is used in only a single time zone, unless a time
zone value is also stored in another property of the object.
Converting or
comparing a DateTime value to a TimeOfDay value
The substring of a DateTime
value from character
position 10 to character position 15 contains a time-of-day value, in
the format HHmmSS expected by a property that has a
Type of TimeOfDay
.
Similarly to Date
conversion, you can
"convert" or extract this TimeOfDay
value from
a DateTime value with a Property-Set assignment:
When the DateTime
value
is 20071201T011532.006 GMT, the resulting value for the
Time
property MyTime is 011523.
However, this approach ignores the time zone information in the
DateTime
value, because the Time
value
conveys no time zone.
Use the standard function rule:
@FormatDateTime(.pyExpireDateTime,
"HHmmss", "", "")
to convert a DateTime
value to a
TimeOfDay
value, in the time zone of the Process
Commander server. (For examples, see Pega Developer Network article
PRKB-24087 How to extract a DateTime value to a Date
or TimeOfDay value.
Avoid using TimeofDay
property
types in persistent objects, such as work objects or assignments, even
if your application is used in only a single time zone, unless a time
zone value is also stored in another property of the object.
Converting Date or
TimeOfDay values to DateTime values
Oracle and IBM DB2
notes
The Oracle datatype DATE
does not correspond to any
Process Commander date type. If feasible, use the Oracle data type
DateTime
or TimeStamp
instead.
Alternatively, use a Process Commander type of Text
to
hold the DATE
value. C-1263 B-19148
Similarly, the IBM DB2 datatypes DATE
and
TIME
do not correspond to any Process Commander types.
When feasible, use the DB2 data type TimeStamp
instead.
If not, use a Process Commander type of Text
to hold the
value. B-14387
Concepts