我有一些时间戳数据形式为" 2013-07-31T13:31:29"我需要添加一秒钟。我在" clock add"中遇到了一些问题。所以我的计划是将时间转换为纪元时间,然后再增加它。在尝试这样做时,我注意到时间似乎并不相同。
Timestamp: 2013-07-31T13:31:29
Epoch time: 1375252289
GMT: Wed, 31 Jul 2013 06:31:29 GMT
此时间戳是通过以下TCL代码生成的:
# timeMinusMilli == 2013-07-31T13:31:29
set epoch [ clock scan $timeMinusMilli -gmt 0 ]
现在,也许我只是感到困惑,但我认为2013-07-31T13:31:29将于2013年7月31日星期三1:31:29,而不是6:31:29。
答案 0 :(得分:3)
记录了Tcl扫描ISO时间的方式:http://www.tcl.tk/man/tcl8.5/TclCmd/clock.htm#M83
ISO 8601时间点规范,例如“ CCyymmdd T hhmmss ”,其中T是文字“T” ,“ CCyymmdd hhmmss ”,或“ CCyymmdd T hh:mm:ss ”。请注意,只接受这三种格式。该命令不接受ISO8601中指定的所有时间点规范。通过为clock scan命令提供显式-format选项,可以识别其他格式。
因此,您必须从日期部分删除标点符号,或完全指定预期输入
% set timestr 2013-07-31T13:31:29
2013-07-31T13:31:29
% set t [clock scan [string map {- ""} $timestr]]
1375291889
% set t [clock scan $timestr -format {%Y-%m-%dT%T}]
1375291889
% clock format $t
Wed Jul 31 13:31:29 EDT 2013
然后,操纵离开:
% clock format [clock add $t +1 second]
Wed Jul 31 13:31:30 EDT 2013
注意我没有做任何特别的事情来解释我的时区(EDT)中的时间