如何在 CMake 中将 UNIX 时间戳转换为 ISO
How do I convert a UNIX timestamp to ISO in CMake
我有一个类似于 1587405820 -0600
的 UNIX 风格时间戳,我想将其转换为 ISO 风格格式,类似于 YYYY-MM-DDTHH:MM:SSZ
CMake 在 https://cmake.org/cmake/help/v3.12/command/string.html#timestamp 处有一个 string(TIMESTAMP ...)
命令,但这只会让我得到格式化字符串中的 当前 时间,这对我的应用程序不起作用。我需要能够将现有时间转换为 ISO 格式。
有办法吗?
更新
根据@squareskittles 的回答,这是我在做正确的测试时得出的结果:
# Check that we get the current timestamp
string(TIMESTAMP TIME_T UTC)
message(STATUS ">>> T1: ${TIME_T}")
# Get the ISO string from our specific timestamp
set(ENV{SOURCE_DATE_EPOCH} 1587405820)
string(TIMESTAMP TIME_T UTC)
unset(ENV{SOURCE_DATE_EPOCH})
message(STATUS ">>> T2: ${TIME_T}")
# Check that we get the current timestamp again correctly
string(TIMESTAMP TIME_T UTC)
message(STATUS ">>> T3: ${TIME_T}")
这给了我这个输出:
-- >>> T1: 2020-04-22T15:08:13Z
-- >>> T2: 2020-04-20T18:03:40Z
-- >>> T3: 2020-04-22T15:08:13Z
如果你想让这个函数使用一个特定的时间而不是当前时间,你可以set环境变量SOURCE_DATE_EPOCH
到UNIX -样式时间戳(整数):
# Set the environment variable to a specific timestamp.
set(ENV{SOURCE_DATE_EPOCH} 1587405820)
# Convert to ISO format, and print it.
string(TIMESTAMP MY_TIME)
message(STATUS ${MY_TIME})
打印(UTC -0600):
2020-04-20T12:03:40
如果需要将这个时间调整为UTC时间,可以添加UTC
参数:
set(ENV{SOURCE_DATE_EPOCH} 1587405820)
string(TIMESTAMP MY_TIME UTC)
message(STATUS ${MY_TIME})
打印:
2020-04-20T18:03:40Z
注意:如果这个SOURCE_DATE_EPOCH
变量在你的CMake代码的其他地方使用,最好在修改它之前保存SOURCE_DATE_EPOCH
值,这样当修改它时可以设置回它以前的值完全的。
我有一个类似于 1587405820 -0600
的 UNIX 风格时间戳,我想将其转换为 ISO 风格格式,类似于 YYYY-MM-DDTHH:MM:SSZ
CMake 在 https://cmake.org/cmake/help/v3.12/command/string.html#timestamp 处有一个 string(TIMESTAMP ...)
命令,但这只会让我得到格式化字符串中的 当前 时间,这对我的应用程序不起作用。我需要能够将现有时间转换为 ISO 格式。
有办法吗?
更新
根据@squareskittles 的回答,这是我在做正确的测试时得出的结果:
# Check that we get the current timestamp
string(TIMESTAMP TIME_T UTC)
message(STATUS ">>> T1: ${TIME_T}")
# Get the ISO string from our specific timestamp
set(ENV{SOURCE_DATE_EPOCH} 1587405820)
string(TIMESTAMP TIME_T UTC)
unset(ENV{SOURCE_DATE_EPOCH})
message(STATUS ">>> T2: ${TIME_T}")
# Check that we get the current timestamp again correctly
string(TIMESTAMP TIME_T UTC)
message(STATUS ">>> T3: ${TIME_T}")
这给了我这个输出:
-- >>> T1: 2020-04-22T15:08:13Z
-- >>> T2: 2020-04-20T18:03:40Z
-- >>> T3: 2020-04-22T15:08:13Z
如果你想让这个函数使用一个特定的时间而不是当前时间,你可以set环境变量SOURCE_DATE_EPOCH
到UNIX -样式时间戳(整数):
# Set the environment variable to a specific timestamp.
set(ENV{SOURCE_DATE_EPOCH} 1587405820)
# Convert to ISO format, and print it.
string(TIMESTAMP MY_TIME)
message(STATUS ${MY_TIME})
打印(UTC -0600):
2020-04-20T12:03:40
如果需要将这个时间调整为UTC时间,可以添加UTC
参数:
set(ENV{SOURCE_DATE_EPOCH} 1587405820)
string(TIMESTAMP MY_TIME UTC)
message(STATUS ${MY_TIME})
打印:
2020-04-20T18:03:40Z
注意:如果这个SOURCE_DATE_EPOCH
变量在你的CMake代码的其他地方使用,最好在修改它之前保存SOURCE_DATE_EPOCH
值,这样当修改它时可以设置回它以前的值完全的。