2

我有一些“2013-07-31T13:31:29”形式的时间戳数据,我需要添加一秒钟。我在“时钟添加”方面遇到了一些问题,所以我的计划是将时间转换为纪元时间,然后增加它。尝试这样做时,我注意到时间似乎彼此不匹配。

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 将是 Wed, 31 Jul 2013 1:31:29,而不是 6:31:29。

4

1 回答 1

3

记录了 Tcl 扫描 ISO 时间的方式:http ://www.tcl.tk/man/tcl8.5/TclCmd/clock.htm#M83

ISO 8601 时间点规范,例如“<em>CCyymmdd T hhmmss ”,其中 T 是文字“T”、“<em>CCyymmdd hhmmss”或“<em>CCyymmdd T hh:mm:ss ”。请注意,仅接受这三种格式。该命令不接受 ISO8601 中指定的所有时间点规范。其他格式可以通过为时钟扫描命令提供显式的 -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) 中的时间

于 2013-08-07T18:04:45.673 回答