2 回答

TA貢獻1780條經驗 獲得超1個贊
這里的問題是 GoLang 結構中日期/時間類型的默認 JSON 編組行為是使用 ISO8601 格式的日期/時間字符串。
這由錯誤消息中的格式字符串標識,帶有T
日期和時間之間的分隔符以及時區后綴。JSON 字符串中的值Discipline
不符合此格式,缺少T
分隔符和任何時區。因此錯誤。
如果您可以影響 gorm 生成的 JSON 字符串的格式(我不熟悉,所以不能說您是否可以或如何這樣做),那么最簡單的解決方案是確保您的 JSON 字符串時間字段是格式為 ISO8601/RFC3339 字符串。
如果你無法控制它,那么你有兩個選擇:
通過中間體對 JSON 進行一些預處理
map[string]any
并重新格式化適當的字段。如果gorm
格式至少是一致的,那么這可能就像在空格上拆分字符串一樣簡單,從時間中刪除最后的 3dps,附加一個適當的時區(或者只是如果時間是 UTC)然后用分隔符重新Z
組裝T
。將自定義時間類型與
json.Marshaller
可以正確處理gorm
格式化值的實現一起使用(您仍然需要知道哪個時區適用于持久值并在編組時正確應用)。
這兩者都容易受到日期/時間變量的 gorm 格式更改和誤用的影響(在選項 #1 的情況下未能進行預處理,在選項 #2 的情況下錯誤地使用而不是自定義類型time.Time
) .
出于這個原因,如果可能的話,修改格式化輸出gorm
將是我的首選方法。

TA貢獻1793條經驗 獲得超6個贊
最快的解決方案是按照@Deltics 的建議,在從數據庫中讀取數據/值時對其進行格式化。
在從數據庫查詢數據時,使用 DATE_FORMAT() 我將數據格式化為 go/json 所需的格式
DATE_FORMAT(actual_data, '%Y-%m-%dT%TZ')
- 2 回答
- 0 關注
- 162 瀏覽
添加回答
舉報