SAP ABAP 日期与时间

ABAP 隐式引用了公历,在世界大多数地区都有效。我们可以将输出转换为特定国家的日历。日期是相对于日历指定的精确日期、周或月的时间。时间指定为相对于一天的精确秒或分钟。

ABAP 使用 24小时 格式时间,输出可以具有特定于国家的格式。

日期和时间通常被解释为在当前时区有效的本地日期。

ABAP 提供了两种内置类型来处理日期和时间:

  • D 数据类型
  • T 数据类型

以下是基础格式:

  1. DATA: date TYPE D,
  2. time TYPE T.
  3. DATA: year TYPE I,
  4. month TYPE I,
  5. day TYPE I,
  6. hour TYPE I,
  7. minute TYPE I,
  8. second TYPE I.

这两种类型都是固定长度的字符类型,其格式分别为 YYYYMMDD 和 HHMMSS。


时间戳

除了这些内置类型之外,其他两种类型 TIMESTAMPTIMESTAMPL 正在许多标准应用程序表中使用,以 UTC 格式存储时间戳。

下表显示了 ABAP 中可用的基本日期和时间类型。

编号数据类型 & 描述
1

D

格式为 YYYYMMDD 的内置固定长度日期类型。例如,值 20100913 表示 2010 年 9 月 13 日。

2

T

HHMMSS 格式的内置固定长度时间类型。例如,值 102305 表示上午 10:23:05 的时间。

3

TIMESTAMP (Type P – Length 8 No decimals)

此类型用于以 YYYYMMDDhhmmss 格式表示短时间戳。例如,值 20100913102305 表示 2010 年 9 月 13 日 上午 10:23:05。

4

TIMESTAMPL (Type P - Length 11 Decimals 7)

TIMESTAMPYYYYMMDDhhmmssmmmuuun 形式表示长时间戳此处,附加数字 'mmmuuun' 表示秒的分数。


当前日期时间

以下代码段查询当前系统日期和时间。

  1. REPORT YR_SEP_15.
  2. DATA: date_1 TYPE D.
  3. date_1 = SY-DATUM.
  4. Write: / 'Present Date is:', date_1 DD/MM/YYYY.
  5. date_1 = date_1 + 06.
  6. Write: / 'Date after 6 Days is:', date_1 DD/MM/YYYY.

结果如下:

  1. Present Date is: 21.09.2015
  2. Date after 6 Days is: 27.09.2015

变量 date_1 被赋值为当前系统日期 SY-DATUM 的值。接下来,我们将日期值增加 6。就 ABAP 中的日期计算而言,这意味着我们要将 date 对象的 day 部分增加 6 天。

ABAP 运行时环境足够智能,可以在日期值到达月末时滚动日期值。

时间计算与日期计算类似。

以下代码使用基本时间算法将当前系统时间增加 75 秒:

  1. REPORT YR_SEP_15.
  2. DATA: time_1 TYPE T.
  3. time_1 = SY-UZEIT.
  4. Write /(60) time_1 USING EDIT MASK
  5. 'Now the Time is: __:__:__'.
  6. time_1 = time_1 + 75.
  7. Write /(60) time_1 USING EDIT MASK
  8. 'A Minute and a Quarter from Now, it is: __:__:__'.

结果如下:

  1. Now the Time is 11:45:05
  2. A Minute and a Quarter from Now, it is: 11:46:20

使用时间戳

您可以使用 GET time STAMP 查询当前系统时间并将其存储在 timestamp 变量中,如以下代码所示。

GET TIME STAMP 语句根据所使用的时间戳数据对象的类型,以普通写法或简写格式存储时间戳。时间戳值使用 UTC 标准进行编码。

  1. REPORT YR_SEP_12.
  2. DATA: stamp_1 TYPE TIMESTAMP,
  3. stamp_2 TYPE TIMESTAMPL.
  4. GET TIME STAMP FIELD stamp_1.
  5. Write: / 'The short time stamp is:', stamp_1
  6. TIME ZONE SY-ZONLO.
  7. GET TIME STAMP FIELD stamp_2.
  8. Write: / 'The long time stamp is:', stamp_2
  9. TIME ZONE SY-ZONLO.

结果如下:

  1. The short time stamp is: 18.09.2015 11:19:40
  2. The long time stamp is: 18.09.2015 11:19:40,9370000

在上面的实例中,我们使用 WRITE 语句的时区添加来显示时间戳。此添加根据指定时区的规则格式化时间戳的输出。

系统字段 SY-ZONLO 用于显示用户首选项中配置的本地时区。