SAP ABAP 日期和时间
ABAP毫不保留地引用了公历日历,在世界大部分地区有效。 我们可以将输出转换为特定国家/地区的日历。 日期是指定到关于日历的精确日,周或月的时间。 时间被指定为相对于一天的精确秒或分钟。 ABAP总是以24小时格式节省时间。 输出可以具有特定于国家的格式。 日期和时间通常被解释为在当前时区有效的本地日期。
ABAP提供了两种内置类型来处理日期和时间:
- D data type
- T data type
以下是基本格式:
DATA: date TYPE D, time TYPE T. DATA: year TYPE I, month TYPE I, day TYPE I, hour TYPE I, minute TYPE I, second TYPE I.
这两种类型都是分别具有YYYYMMDD和HHMMSS格式的固定长度字符类型。
时间戳
除了这些内置类型,其他两种类型 TIMESTAMP 和 TIMESTAMPL 在许多标准应用程序表中用于存储UTC格式的时间戳。 下表显示了ABAP中可用的基本日期和时间类型。
编号 | 数据类型和说明 |
---|---|
1 | D 内置的固定长度日期类型,格式为YYYYMMDD。 例如,值20100913表示2010年9月13日的日期。 |
2 | T 内置固定长度时间类型,格式为HH MM SS。 例如,值102305表示时间10:23:05 AM。 |
3 | TIMESTAMP (类型P - 长度8无小数) 此类型用于表示YYYYMMDDhhmmss表单中的短时间戳。 例如,值20100913102305表示2010年9月13日上午10:23:05的日期。 |
4 | TIMESTAMPL (类型P - 长度11小数7) TIMESTAMPL表示YYYYMMDDhhmmss,mmmuuun表单中的长时间戳。 这里,附加数字“mmmuuun"表示秒的分数。 |
当前日期和时间
以下代码片段检索当前系统日期和时间。
REPORT YR_SEP_15. DATA: date_1 TYPE D. date_1 = SY-DATUM. Write: / 'Present Date is:', date_1 DD/MM/YYYY. date_1 = date_1 + 06. Write: / 'Date after 6 Days is:', date_1 DD/MM/YYYY.
上面的代码产生以下输出:
Present Date is: 21.09.2015 Date after 6 Days is: 27.09.2015
变量date_1分配有当前系统日期SY-DATUM的值。 接下来,我们将日期值增加6.对于ABAP中的日期计算,这意味着我们将日期对象的日期组件增加6天。 ABAP运行时环境足够聪明,可以在每月结束时翻转日期值。
时间计算与日期计算类似。 以下代码使用基本时间算法将当前系统时间增加75秒。
REPORT YR_SEP_15. DATA: time_1 TYPE T. time_1 = SY-UZEIT. Write /(60) time_1 USING EDIT MASK 'Now the Time is: __:__:__'. time_1 = time_1 + 75. Write /(60) time_1 USING EDIT MASK 'A Minute and a Quarter from Now, it is: __:__:__'.
上面的代码产生以下输出
Now the Time is 11:45:05 A Minute and a Quarter from Now, it is: 11:46:20
使用时间戳
您可以使用 GET TIME STAMP 检索当前系统时间并将其存储在时间戳变量中,如以下代码所示。 GET TIME STAMP语句根据所使用的时间戳数据对象的类型以长指针或短指针格式存储时间戳。 时间戳值使用UTC标准进行编码。
REPORT YR_SEP_12. DATA: stamp_1 TYPE TIMESTAMP, stamp_2 TYPE TIMESTAMPL. GET TIME STAMP FIELD stamp_1. Write: / 'The short time stamp is:', stamp_1 TIME ZONE SY-ZONLO. GET TIME STAMP FIELD stamp_2. Write: / 'The long time stamp is:', stamp_2 TIME ZONE SY-ZONLO.
上面的代码产生以下输出:
The short time stamp is: 18.09.2015 11:19:40 The long time stamp is: 18.09.2015 11:19:40,9370000
在上面的示例中,我们使用TIME ZONE添加WRITE语句显示时间戳。 此添加根据指定的时区的规则格式化时间戳的输出。 系统字段SY-ZONLO用于显示在用户首选项中配置的本地时区。