如果提交日期为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
答案 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
的结果会给你正确的时间戳