Ibm midrange as400 RPGLE以UNIX历元格式获取UTC时间

Ibm midrange as400 RPGLE以UNIX历元格式获取UTC时间,ibm-midrange,rpgle,Ibm Midrange,Rpgle,仍在学习RPG/as400。 我需要以UNIX epoch格式获取UTC的当前日期和时间。我在搜索如何将标准的dd/mm/yyyy hh:mm:ss转换为unix格式时也没有太多运气。 有可能从as400中提取UNIX时间戳吗?我真的怀疑是否需要这样做 但是从ILE RPG,您可以调用C函数…这似乎是您想要的函数… 如果您不熟悉从ILE RPG调用C函数,这里有一篇很好的文章,甚至介绍了mktime()。 请注意,所需的原型和数据结构定义可以在“System Includes”库QSYSIN

仍在学习RPG/as400。 我需要以UNIX epoch格式获取UTC的当前日期和时间。我在搜索如何将标准的dd/mm/yyyy hh:mm:ss转换为unix格式时也没有太多运气。
有可能从as400中提取UNIX时间戳吗?

我真的怀疑是否需要这样做

但是从ILE RPG,您可以调用C函数…这似乎是您想要的函数…

如果您不熟悉从ILE RPG调用C函数,这里有一篇很好的文章,甚至介绍了mktime()。

请注意,所需的原型和数据结构定义可以在“System Includes”库QSYSINC、ILERPE源文件(QRPGLESRC)成员“time”中找到……仅此而已

如果您的系统上没有QSYSINC库,请让管理员安装操作系统(LICPGM 5770-ss1)的
选项13-系统开放性包括

最后,您可以使用以下摘录

 D time_t                        10I 0 template
 D struct_tm...
 D                 DS                  QUALIFIED ALIGN
 D                                     TEMPLATE
  //  int tm_sec;             /* seconds after the minute (0-61)        */
  //  int tm_min;             /* minutes after the hour (0-59)          */
  //  int tm_hour;            /* hours since midnight (0-23)            */
  //  int tm_mday;            /* day of the month (1-31)                */
  //  int tm_mon;             /* months since January (0-11)            */
  //  int tm_year;            /* years since 1900                       */
  //  int tm_wday;            /* days since Sunday (0-6)                */
  //  int tm_yday;            /* days since January 1 (0-365)           */
  //  int tm_isdst;           /* Daylight Saving Time flag              */
 D tm_sec                        10I 0
 D tm_min                        10I 0
 D tm_hour                       10I 0
 D tm_mday                       10I 0
 D tm_mon                        10I 0
 D tm_year                       10I 0
 D tm_wday                       10I 0
 D tm_yday                       10I 0
 D tm_isdst                      10I 0
 D mktime          PR                  LIKE(time_t)
 D                                     EXTPROC('mktime')
 D  time                               LIKEDS(struct_tm)

我真的怀疑有没有这个必要

但是从ILE RPG,您可以调用C函数…这似乎是您想要的函数…

如果您不熟悉从ILE RPG调用C函数,这里有一篇很好的文章,甚至介绍了mktime()。

请注意,所需的原型和数据结构定义可以在“System Includes”库QSYSINC、ILERPE源文件(QRPGLESRC)成员“time”中找到……仅此而已

如果您的系统上没有QSYSINC库,请让管理员安装操作系统(LICPGM 5770-ss1)的
选项13-系统开放性包括

最后,您可以使用以下摘录

 D time_t                        10I 0 template
 D struct_tm...
 D                 DS                  QUALIFIED ALIGN
 D                                     TEMPLATE
  //  int tm_sec;             /* seconds after the minute (0-61)        */
  //  int tm_min;             /* minutes after the hour (0-59)          */
  //  int tm_hour;            /* hours since midnight (0-23)            */
  //  int tm_mday;            /* day of the month (1-31)                */
  //  int tm_mon;             /* months since January (0-11)            */
  //  int tm_year;            /* years since 1900                       */
  //  int tm_wday;            /* days since Sunday (0-6)                */
  //  int tm_yday;            /* days since January 1 (0-365)           */
  //  int tm_isdst;           /* Daylight Saving Time flag              */
 D tm_sec                        10I 0
 D tm_min                        10I 0
 D tm_hour                       10I 0
 D tm_mday                       10I 0
 D tm_mon                        10I 0
 D tm_year                       10I 0
 D tm_wday                       10I 0
 D tm_yday                       10I 0
 D tm_isdst                      10I 0
 D mktime          PR                  LIKE(time_t)
 D                                     EXTPROC('mktime')
 D  time                               LIKEDS(struct_tm)

当你与外界交流时,总是需要这样的东西,例如JWT(检查令牌是否过期)

您也可以在不使用C函数的情况下执行此操作:

**FREE

ctl-opt dftactgrp(*no) actgrp(*caller);

dcl-pr sys_getUtcOffset extproc('CEEUTCO');
  offsetHours int(10);
  offsetMinutes int(10);
  offsetSeconds float(8);
  feedback char(12) options(*omit);
end-pr;

dcl-c UNIX_EPOCH_START z'1970-01-01-00.00.00.000000';

main();
*inlr = *on;


dcl-proc main;
  dcl-s uxts int(10);
  dcl-s now timestamp;
  dcl-s offsetHours int(10);
  dcl-s offsetMinutes int(10);
  dcl-s offsetSeconds float(8);

  now = z'2020-04-15-00.00.00.000';
  sys_getUtcOffset(offsetHours : offsetMinutes : offsetSeconds : *omit);

  uxts = %diff(now : UNIX_EPOCH_START : *SECONDS) - offsetSeconds;

  // Output : 1586908800
  dsply %char(uxts);
end-proc;

当你与外界交流时,总是需要这样的东西,例如JWT(检查令牌是否过期)

您也可以在不使用C函数的情况下执行此操作:

**FREE

ctl-opt dftactgrp(*no) actgrp(*caller);

dcl-pr sys_getUtcOffset extproc('CEEUTCO');
  offsetHours int(10);
  offsetMinutes int(10);
  offsetSeconds float(8);
  feedback char(12) options(*omit);
end-pr;

dcl-c UNIX_EPOCH_START z'1970-01-01-00.00.00.000000';

main();
*inlr = *on;


dcl-proc main;
  dcl-s uxts int(10);
  dcl-s now timestamp;
  dcl-s offsetHours int(10);
  dcl-s offsetMinutes int(10);
  dcl-s offsetSeconds float(8);

  now = z'2020-04-15-00.00.00.000';
  sys_getUtcOffset(offsetHours : offsetMinutes : offsetSeconds : *omit);

  uxts = %diff(now : UNIX_EPOCH_START : *SECONDS) - offsetSeconds;

  // Output : 1586908800
  dsply %char(uxts);
end-proc;

Unix epoch不是一个整数,表示自1970年1月1日以来的秒数吗?Unix epoch不是一个整数,表示自1970年1月1日以来的秒数吗?谢谢。我需要这个来提取我们资产的位置历史记录。日期范围必须为unix格式,并编码到请求标题中。谢谢。我需要这个来提取我们资产的位置历史记录。日期范围必须为unix格式,并编码到请求头中。非常感谢!非常感谢你!