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)

http://play.golang.org/p/elr28mfMo8

Другие вопросы по тегам