Golang - отметка времени потери года после форматирования и хранения
Я использую среду выполнения Go для хранения сущностей в хранилище данных Appengine, упорядоченных по времени их добавления; чтобы сохранить метку времени в ключе, я форматирую метку времени с помощью метода time.Time.String() и сохраняю строковую версию в качестве ключа.
Чтобы снова вернуть время при поиске, я использую time.Parse:
time.Parse("2006-01-02 15:04:05.000000000 +0000 UTC", the_timestamp)
В модульном тестировании этой функции, независимой от приложения (с использованием cmdline - goapp test), мои тесты без проблем извлекают метку времени.
Но когда я импортирую пакет, делающий это, в приложение appengine и протестирую его (используя cmdline - goapp serve), отметка времени сохраняется с полем Year, установленным на "0000".
1 ответ
Когда вы конвертируете свое время в строку перед сохранением в хранилище данных, лишние 0 в конце времени удаляются. Так,
2009-11-10 23:00:00.12300000 +0000 UTC
превращается в
2009-11-10 23:00:00.123 +0000 UTC
Теперь, когда вы извлекаете его из хранилища данных и используете функцию Parse, он пытается сопоставить до 8 цифр после десятичной дроби. Отсюда и ошибка.
Таким образом, при преобразовании времени в строку необходимо отформатировать строку, чтобы нули не были потеряны.
const layout = "2006-01-02 15:04:05.000000000 +0000 UTC"
t := time.Now()
tFormat := t.Format(layout)