首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将git-log旧提交者时间戳转换为严格的ISO 8601时间戳

将git-log旧提交者时间戳转换为严格的ISO 8601时间戳
EN

Stack Overflow用户
提问于 2019-05-29 13:13:57
回答 2查看 69关注 0票数 0

我负责部署应用程序,作为部署过程的一部分,我需要以严格的ISO8601格式获取最新的提交者时间戳,并将其放入数据库中。对于最新版本的git,这是相当简单的:

代码语言:javascript
复制
$ git log --pretty=format:'%cI' -n1
2019-05-29T10:24:58+04:00

但不幸的是,我有一些较旧的实例,其中开关%cI不存在于已安装的git中。因此,为了更接近ISO8601,我改用%ci,结果是:

代码语言:javascript
复制
$ git log --pretty=format:%ci -n1
2019-05-29 10:24:58 +0400

我们最终会将机器升级到更高版本的操作系统,从而升级到更新版本的git。较新版本的git在手册页中提供了以下内容:

代码语言:javascript
复制
   •   %ci: committer date, ISO 8601-like format

   •   %cI: committer date, strict ISO 8601 format

但在此期间,我想在旧机器上将这个类似ISO 8601的字符串转换为上面严格的ISO 8601格式。我写了一个看起来很糟糕的一行代码来做这件事,它似乎起作用了:

代码语言:javascript
复制
$ git log --pretty=format:'%ci' -n1 | sed -e 's/ /T/1' -e 's/ //1' -e 's/.\{22\}/&:/1'
2019-05-29T10:24:58+04:00

简单地说,它将第一个空格替换为T,第二个空格不带任何内容,并在第22个字符位置插入一个冒号:。我该如何做得更好呢?我尝试过使用date命令来实现这一点,但没有成功。

EN

回答 2

Stack Overflow用户

发布于 2019-05-29 13:28:44

你是说像这样的东西?

代码语言:javascript
复制
date -d "$(git log --pretty=format:%ci -n1)" --iso-8601=seconds
票数 2
EN

Stack Overflow用户

发布于 2019-05-29 20:13:24

使用sed

代码语言:javascript
复制
$ echo '2019-05-29 10:24:58 +0400' | sed -e 's/ /T/' -e 's/ //' -e 's/..$/:\0/'

2019-05-29T10:24:58+04:00

将第一个空格替换为T,删除第二个空格,将最后两个字符替换为冒号和这两个字符。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56353499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档