Vla*_*ad 13 linux datetime date smartsheet-api-2.0
我需要参数化日期时间值,目的是传递到构造的 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" }
Run Code Online (Sandbox Code Playgroud)
谢谢,
ran*_*mir 18
要以ISO 8601格式输出日期,您可能需要使用-I[FMT]/--iso-8601[=FMT]选项,如果您date支持的话(GNU/Linux 版本支持)。这FMT基本上是一个解决方案,在您的情况下,您需要使用s几秒钟:
$ date -Is
2018-03-09T09:28:14+01:00
Run Code Online (Sandbox Code Playgroud)
替代方案(对于POSIXdate,包括BSD/OSXdate)是明确指定格式并输出UTC时区(-u标志)中的时间:
$ date -u +"%Y-%m-%dT%H:%M:%SZ"
2018-03-09T08:28:14Z
Run Code Online (Sandbox Code Playgroud)
请注意在这种情况下我们可以附加的重要性-u和显式Z。如果没有-u,我们将需要以+hh:mm格式输出确切的时区,但 POSIXdate仅支持时区名称输出 ( %Z)。GNUdate扩展了%:z用于输出数字时区的格式集,但如果已经使用 GNU date,则第一种方法-Is更简单。
date在 shell 中调用时使用以下格式
date +"%Y-%m-%dT%H-%M-%SZ"
Run Code Online (Sandbox Code Playgroud)
2018-03-09T07-44-39Z