16.[SAP ABAP] ABAP中日期与时间
文章目录
- [16.[SAP ABAP] ABAP中日期与时间](#16.[SAP ABAP] ABAP中日期与时间)
-
- 一、基本数据类型
- 二、常用系统字段(SYST结构)
- 三、获取当前日期/时间
- [四、日期/ 时间计算(自动处理月末、闰年等)](#四、日期/ 时间计算(自动处理月末、闰年等))
- 五、时间戳(Timestamp)处理
-
- [1. 获取当前时间戳(UTC)](#1. 获取当前时间戳(UTC))
- [2.时间戳 ↔ 日期时间转换](#2.时间戳 ↔ 日期时间转换)
- [六、外部格式转换(如 "2025-12-26" → 内部 "20251226")](#六、外部格式转换(如 "2025-12-26" → 内部 "20251226"))
在SAP ABAP中,日期和时间的处理时开发中非常常见的需求。ABAP提供了多种内置数据类型、系统字段、函数模块(Function Modules)以及类来支持灵活且准确的时间处理。
一、基本数据类型
| 类型 | 描述 | 格式示例 |
|---|---|---|
| D(或DATS) | 日期类型,8位字符型 | 20251226表示2025年12月26日 |
| T | 时间类型,6位字符型 | 1220220 表示22:40:30 |
| TIMESTAMP | 短时间戳(UTC),DEC(15,0) |
20251226224430 |
| TIMESTAMPL | 长时间戳(含微秒),DEC(21,7) |
20251226224430.1234567 |
注意:
D和T是字符型,但 ABAP 运行时会自动将其当作数值进行加减运算(如sy-datum + 1表示明天)。
二、常用系统字段(SYST结构)
| 字段 | 含义 |
|---|---|
| SY-DATUM | 应用服务器本地日期(YYYYMMDD) |
| SY-UZEIT | 应用服务器本地时间(HHMMSS) |
| SY-DATLO | 用户所在时区的本地日期 |
| SY-TIMLO | 用户所在时区的本地时间 |
| SY-ZONLO | 用户时区(如 'Asia/Shanghai') |
| SY-TZONE | 系统时区与 UTC 的偏移(秒数) |
三、获取当前日期/时间
ABAP
REPORT Y_GOY_MSG.
DATA: lv_date type d,
lv_time type t.
lv_date = sy-datum.
lv_time = sy-uzeit.
WRITE: / '今天是:' , lv_date.
WRITE: / '今天是:' , lv_date DD/MM/YYYY.
WRITE: / '当前时间:', lv_time USING EDIT MASK '__:__:__'.
四、日期/ 时间计算(自动处理月末、闰年等)
ABAP
DATA: lv_tomorrow TYPE d,
lv_yesterday TYPE d.
lv_tomorrow = sy-datum + 1.
lv_yesterday = sy-datum - 1.
WRITE: / '昨天:', lv_yesterday.
WRITE: / '明天 :', lv_tomorrow.
五、时间戳(Timestamp)处理
1. 获取当前时间戳(UTC)
ABAP
DATA: lv_short TYPE timestamp,
lv_long TYPE timestampl.
GET TIME STAMP FIELD lv_short.
GET TIME STAMP FIELD lv_long.
WRITE: / '短时间 (local):', lv_short TIME ZONE sy-zonlo.
WRITE: / '长时间 (local):', lv_long TIME ZONE sy-zonlo.
2.时间戳 ↔ 日期时间转换
ABAP
DATA: lv_ts TYPE timestamp,
lv_date TYPE d,
lv_time TYPE t.
GET TIME STAMP FIELD lv_ts.
CONVERT TIME STAMP lv_ts TIME ZONE sy-zonlo
INTO DATE lv_date TIME lv_time.
WRITE: / 'Converted date:', lv_date,
/ 'Converted time:', lv_time USING EDIT MASK '__:__:__'.
六、外部格式转换(如 "2025-12-26" → 内部 "20251226")
可自定义函数或使用标准函数如:
CONVERT_DATE_TO_INTERNALCONVERT_DATE_TO_EXTERNAL