获取hg提交的Unix时间戳(以秒为单位)

时间:2014-08-31 21:11:52

标签: date mercurial

如果提交日期为Mon Aug 18 21:05:38 2014 +0200,我怎样才能在几秒钟内获得它的Unix时间戳?

以下命令会生成一个丢弃该号码的号码(可能是因为date的时区信息被丢弃):

$ hg log -l1 --template '{date(date, "%s")}\n'
1408392338
$ date -d@1408392338
Mon Aug 18 22:05:38 CEST 2014

我正在有效地寻找产生提交日期的git命令的等价物作为Unix时间戳:

git log -n1 --pretty=%ct

3 个答案:

答案 0 :(得分:2)

请求的时间戳是独立于时区的时间戳,因此是UTC时间。当date(..., "%s")生成一个相对于当前时区的数字时,应该通过将localdate过滤器与TZ环境变量组合来设置时区来请求UTC输出:

TZ=UTC hg log -l1 --template '{date(date|localdate, "%s")}\n')

答案 1 :(得分:1)

最简单的解决方案是采用已经使用UTC的模板格式{date|hgdate}产生的第一个字段。此格式的第二个字段仅给出时区,可以通过在格式说明符中应用Mercurial的word函数来将其丢弃。这是在Mercurial 3.7.3上针对系统date命令和您自己的(正确的,但更长的)答案进行的这种格式的测试:

$ date +%s && hg commit -m 'ok'
1539258496
$ TZ=UTC hg log -l1 --template '{date(date|localdate, "%s")}\n'
1539258496
$ hg log -l1 -r. --template '{date|hgdate}'
1539258496 -7200
$ hg log -l1 --template '{word(0, date|hgdate)}'
1539258496

还可以通过hg过滤器的hgdate联机帮助页中的描述来确认正确性:

  

hgdate 日期。以一对数字的形式返回日期:“ 1157407993 25200”(Unix时间戳,时区偏移)。

(注意:时区偏移量有点令人困惑,它被否定了:我在UTC + 2中,但是偏移量为-7200秒。但是,这仅在需要本地时间时才重要。如果您使用的是UTC,则无论如何都将忽略此偏移量。)

总体而言,date|hgdate变体只保存了几个字符,但是我个人认为它在概念上更简洁,更易于理解。由于它涉及较少的解析和格式化操作,因此它对于应付Mercurial将来可能出现的错误的功能可能也更强大。

答案 2 :(得分:0)

  • 您可以任何格式获取变更集的日期,该格式了解-d日期选项并在date -d -F中使用
  • 您可以将关键字与过滤器
  • 一起使用

样品

hg log -r tip -T "date: {date}\nhgdate: {date|hgdate}\nISO-date: {date|isodate}\n"
date: 1390885140.0-21600
hgdate: 1390885140 -21600
ISO-date: 2014-01-28 10:59 +0600

我认为(懒得测试),表达式1390885140-21600的结果会给你正确的时间戳