Можно ли надежно преобразовать временную метку golang RFC3339Nano в временную метку Unix и обратно?

В моем приложении golang я использую метку времени второго разрешения Unix (сгенерированную с помощью time.Now().UTC().Unix()) как часть соли в хеш-функции, используемой для аутентификации запроса.

Есть желание сохранить эту временную метку в хранилище данных, где соглашением являются строки временных меток RFC3339 с разрешением в наносекунды, сгенерированные golang Функция RFC3339Nano вместе с хэшем для аутентификации.

Вопрос: существует ли какой-либо риск того, что RFC3339Nano нельзя будет точно преобразовать в исходную временную метку Unix, если позже потребуется повторная аутентификация хэша?

Я знаю, что есть некоторые проблемы с високосными секундами, которые применяются к временным меткам Unix; возможно ли когда-нибудь, что циклический обход RFC3339Nano приведет к другой метке времени, что ошибочно сделает подпись недействительной?

Временная метка RFC3339Nano и временная метка Unix генерируются из одной и той же структуры time.Time.

Я склонен думать, что это сработает, поскольку високосные секунды порождают дополнительную 61-ю секунду в день их появление, которое, как я ожидаю, будет отображаться на ту же отметку времени Unix, что и предыдущая секунда. Однако обратное явно потерпело бы неудачу.


person Techrocket9    schedule 19.03.2019    source источник


Ответы (1)


Я думаю, что вы страдаете от таких проблем без причины, почему бы вам просто не использовать Unix() напрямую для сохранения в базе данных и восстановления с этим?

person Cytown    schedule 20.03.2019
comment
Соглашение службы заключается в сериализации всех временных меток в формат RFC3339Nano. Я готов нарушить условность, если это необходимо, но мне нужен аргумент, почему это необходимо. - person Techrocket9; 20.03.2019