此示例展示了如何使用 Tcl 创建日期和时间戳。可以在脚本设计流程中使用日期和时间戳来准确记录脚本运行的时间。将日期和时间戳写入设计文件,可将设计编译时间在存储芯片上。
可以使用 Tcl 命令生成仅包含所需日期和时间元素的自定义格式日期和时间字符串。使用 Tcl 命令 clock seconds 返回当前时间,使用 clock format 生成自定义格式的日期和时间字符串。有关指定日期和时间字符串格式的更多信息,请参阅“日期和时间格式化”网页。它包含示例和关键字格式表。
下面是一个日期和时间字符串不同格式选项的两个示例。
示例 1
以下命令生成包含以下元素的格式化日期和时间字符串,这些元素的顺序如下:
- 四位数的年份
- 两位数的月份 (01-12)
- 两位数的日期 (01-31)
- 24 小时制、两位数的小时 (00-23)
- 两位数的分钟 (00-59)
- 两位数的秒 (00-59)
clock format [clock seconds] -format {%Y %m %d %H %M %S}
此命令生成如下所示的字符串:
2005 01 10 15 16 55
示例 2
第二个示例生成包含以下元素的格式化日期和时间字符串,这些元素的顺序如下:
- 月份简称,后跟句号
- 一月中的第几天(两位数),后跟逗号
- 四位数的年份
- HH:MM:SS 格式的时间
- 上午/下午指示符
clock format [clock seconds] -format {%b. %d, %Y %I:%M:%S %p}
此命令生成如下所示的字符串:
Jan. 10, 2005 03:31:20 PM
转换日期和时间字符串
通常必须将 ASCII 日期和时间字符串转换为另一种格式(如十六进制或二进制),才能将其存储在寄存器库或内存中。下面是两个格式转换示例。
十进制到十六进制
如果使用仅生成数字值的日期和时间元素,可以将其视为十进制数字,以便进行转换。以下命令生成一个日期戳,依次包含一年中的第几天 (001-366)、24 小时制的小时和分钟。
set str [clock format [clock seconds] -format {%j%H%M}] set out [format "%X" $str]
此命令在变量 out 中生成如下所示的字符串:
17D40F
ASCII 到十六进制
以下命令生成一个日期和时间字符串,并将其转换为存储在变量 out 中的压缩十六进制字符串。每对十六进制数字是 ASCII 字符的十六进制代码。
set str [clock format [clock seconds] -format {%b. %d, %Y %I:%M:%S %p}] binary scan $str "H*" out
此命令在变量 out 中生成如下所示的字符串:
4a616e2e2031302c20323030352030333a33363a303520504d