我需要参数化一个日期时间值,目的是传递给构造的URI以进行Smartsheet API调用,以便在过去24小时内更改数据(即工作表)。
我想使用Linux date
命令,因为我可以执行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" }
谢谢,
答案 0 :(得分:2)
在shell中调用date
时,请使用以下格式
date +"%Y-%m-%dT%H-%M-%SZ"
2018-03-09T07-44-39Z
答案 1 :(得分:1)
在 bash_profile
中使用此别名:
alias utc='date -u +"%Y-%m-%dT%H:%M:%SZ"'
然后,您可以像这样运行它:
$ utc
输出将是:
$ 2021-04-15T01:36:31Z
答案 2 :(得分:0)
要以ISO 8601格式输出日期,您可能希望使用-I[FMT]
/ --iso-8601[=FMT]
选项,如果date
支持它(GNU / Linux版本) 。 FMT
基本上是一个解决方案,在您的情况下,您需要使用s
秒:
$ date -Is
2018-03-09T09:28:14+01:00
备选方案(适用于POSIX date
,包括BSD/OSX date
)是明确指定格式并在UTC
时区(-u
标志)中输出时间:
$ date -u +"%Y-%m-%dT%H:%M:%SZ"
2018-03-09T08:28:14Z
请注意-u
的重要性以及我们可以在这种情况下附加的显式Z
。如果没有-u
,我们需要以+hh:mm
格式输出确切的时区,但POSIX date
仅支持时区名称输出(%Z
)。 GNU date
扩展了使用%:z
设置的格式,该格式输出了数字时区,但如果已经使用GNU date
,则-Is
的第一种方法更简单。