2 回答
TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超1個(gè)贊
這里的問(wèn)題是 GoLang 結(jié)構(gòu)中日期/時(shí)間類(lèi)型的默認(rèn) JSON 編組行為是使用 ISO8601 格式的日期/時(shí)間字符串。
這由錯(cuò)誤消息中的格式字符串標(biāo)識(shí),帶有T日期和時(shí)間之間的分隔符以及時(shí)區(qū)后綴。JSON 字符串中的值Discipline不符合此格式,缺少T分隔符和任何時(shí)區(qū)。因此錯(cuò)誤。
如果您可以影響 gorm 生成的 JSON 字符串的格式(我不熟悉,所以不能說(shuō)您是否可以或如何這樣做),那么最簡(jiǎn)單的解決方案是確保您的 JSON 字符串時(shí)間字段是格式為 ISO8601/RFC3339 字符串。
如果你無(wú)法控制它,那么你有兩個(gè)選擇:
通過(guò)中間體對(duì) JSON 進(jìn)行一些預(yù)處理
map[string]any并重新格式化適當(dāng)?shù)淖侄?。如?code>gorm格式至少是一致的,那么這可能就像在空格上拆分字符串一樣簡(jiǎn)單,從時(shí)間中刪除最后的 3dps,附加一個(gè)適當(dāng)?shù)臅r(shí)區(qū)(或者只是如果時(shí)間是 UTC)然后用分隔符重新Z組裝T。將自定義時(shí)間類(lèi)型與
json.Marshaller可以正確處理gorm格式化值的實(shí)現(xiàn)一起使用(您仍然需要知道哪個(gè)時(shí)區(qū)適用于持久值并在編組時(shí)正確應(yīng)用)。
這兩者都容易受到日期/時(shí)間變量的 gorm 格式更改和誤用的影響(在選項(xiàng) #1 的情況下未能進(jìn)行預(yù)處理,在選項(xiàng) #2 的情況下錯(cuò)誤地使用而不是自定義類(lèi)型time.Time) .
出于這個(gè)原因,如果可能的話,修改格式化輸出gorm將是我的首選方法。
TA貢獻(xiàn)1793條經(jīng)驗(yàn) 獲得超6個(gè)贊
最快的解決方案是按照@Deltics 的建議,在從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)/值時(shí)對(duì)其進(jìn)行格式化。
在從數(shù)據(jù)庫(kù)查詢(xún)數(shù)據(jù)時(shí),使用 DATE_FORMAT() 我將數(shù)據(jù)格式化為 go/json 所需的格式
DATE_FORMAT(actual_data, '%Y-%m-%dT%TZ')
- 2 回答
- 0 關(guān)注
- 184 瀏覽
添加回答
舉報(bào)
