将Linux日期转换为yyyy-MM-dd' HH:mm:ss' Z'格式

时间:2018-03-09 05:32:59

标签: linux date datetime smartsheet-api-2.0

我需要参数化一个日期时间值,目的是传递给构造的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" }

谢谢,

3 个答案:

答案 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的第一种方法更简单。