如何输入年份和月份?

时间:2016-10-08 11:50:11

标签: tcl

我正在尝试输入包含月份和年份的日期字符串,例如2000年1月。

根据man page,%B(和%b)“输入时,匹配给定语言环境中月份的名称(缩写或完整形式,或任一形式的任何唯一前缀)” ,但我无法做到这一点:

% clock scan "January 2000" -format "%B %Y"
1475881200
% clock format 1475881200 -format "%B %Y"
October 2016

在我看来,好像Tcl不理解某些事情并且默认为今天的日期。

我希望我的命令返回946684800[clock scan 2000-01-01 -format %Y-%M-%D]

的结果

[clock scan],文档或我对文档的阅读是否有问题?

2 个答案:

答案 0 :(得分:1)

有趣的问题。您似乎还需要指定一天

$ echo 'puts [clock format [clock scan "January 2000" -format "%B %Y"]]' | tclsh8.6
Sat Oct 08 00:00:00 EDT 2016

$ echo 'puts [clock format [clock scan "1 January 2000" -format "%d %B %Y"]]' | tclsh8.6
Sat Jan 01 00:00:00 EST 2000

我在文档(http://tcl.tk/man/tcl8.6/TclCmd/clock.htm)中看到以

开头的部分
  

日期根据预处理格式字符串中的字段确定。按优先顺序排列:

结尾
  
      
  1. 如果上述规则均未导致可用日期,则使用给定时区内的基准时间日期。
  2.   

它可能在#3中,你期望匹配,但不是。

答案 1 :(得分:1)

我可以看到同样的问题,但前提是我没有指定月份的日期。如果我这样做,事情就会奏效:

% clock scan "1 January 2000" -format "%d %B %Y"
946684800
% clock format 946684800
Sat Jan 01 00:00:00 GMT 2000

虽然是的,但我认为这是一个错误(你可能应该在core.tcl-lang.org问题跟踪器上报告),在一个月的(假的?)日添加似乎是一个简单的解决方法。毕竟,没有它应该解析器默认为当前日期或第一天或其他一天?什么是代表日?指定它,问题就消失了。