19

我需要参数化一个日期时间值,其目标是传递给一个构造的 URI,以进行 Smartsheet API 调用以获取过去 24 小时内更改的数据(即工作表)。

我想使用 Linuxdate命令,因为我可以做一些事情,比如date -d '1 day ago' %F获取前一天的输出。如何使用 date 命令将值转换为yyyy-MM-dd'T'HH:mm:ss'Z'格式以获得类似的内容2018-01-01T00:00:00-07:00

如果该值不是这种特定格式,则 Smartsheet API 会抱怨:

HTTP_01 - Error fetching resource. Status: 400 Reason: 
Bad Request : { "errorCode" : 1018, "message" : "The value '/home/my/path/to/param_file/Sysdate' was not valid for the parameter modifiedSince.", "refId" : "1xqawd3s94f4y" }

谢谢,

4

4 回答 4

23

要以ISO 8601格式输出日期,您可能需要使用-I[FMT]/--iso-8601[=FMT]选项,如果您date支持它(GNU/Linux 版本支持)。这FMT基本上是一个解决方案,在您的情况下,您需要使用s几秒钟:

$ date -Is
2018-03-09T09:28:14+01:00

另一种方法(对于POSIXdate,包括BSD/OSXdate)是明确指定格式并输出UTC时区(-u标志)中的时间:

$ date -u +"%Y-%m-%dT%H:%M:%SZ"
2018-03-09T08:28:14Z

请注意在这种情况下我们可以附加的重要性-u和显式。Z如果没有-u,我们需要以+hh:mm格式输出准确的时区,但 POSIXdate仅支持时区名称输出 ( %Z)。GNUdate扩展了%:z输出数字时区的格式集,但如果已经使用 GNU date,第一种方法-Is更简单。

于 2018-03-09T08:33:51.713 回答
3

在你的 shell 中调用date时,使用以下格式

date +"%Y-%m-%dT%H-%M-%SZ"

2018-03-09T07-44-39Z

于 2018-03-09T05:46:26.997 回答
2

在 中使用此别名bash_profile

alias utc='date -u +"%Y-%m-%dT%H:%M:%SZ"'

然后,您可以像这样运行它:

$ utc

输出将是:

$ 2021-04-15T01:36:31Z
于 2021-04-15T01:37:22.490 回答
1

To be shortest as possible :

date -u +"%FT%TZ" for UTC

date +"%FT%TZ" for locale's time

于 2021-09-20T10:37:42.707 回答