Как мне преобразовать отметку времени UNIX в ISO в CMake - PullRequest
2 голосов
/ 20 апреля 2020

У меня есть отметка времени в стиле UNIX, которая выглядит как 1587405820 -0600, которую я хотел бы преобразовать в формат стиля ISO, что-то вроде YYYY-MM-DDTHH:MM:SSZ

CMake имеет команду string(TIMESTAMP ...) в https://cmake.org/cmake/help/v3.12/command/string.html#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

1 Ответ

3 голосов
/ 20 апреля 2020

Если вы хотите, чтобы эта функция использовала заданное c время , отличное от , чем текущее время, вы можете установить переменную среды 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})

отпечатков (для UT C -0600):

2020-04-20T12:03:40

Если вам нужно настроить это время на время UT C, вы можно добавить аргумент 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 значение до его изменения, так что оно может быть возвращено к его предыдущему значению после завершения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...