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.
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 HTML property 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).
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
Testing input and output formats
To see the effect of a specific HTML Property 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
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:
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.
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.
Concepts