亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 golang 中將時間字符串解組為 time.Time?

如何在 golang 中將時間字符串解組為 time.Time?

Go
慕妹3242003 2023-03-15 14:40:48
我正在使用 JOIN、CONCAT、GROUP_CONCAT、JSON_OBJECT 從多個表中讀取數據。使用 gorm 將數據讀入下面提到的模型。type OrgUserDisPublisherData struct {    Disciplines datatypes.JSON `json:"disciplines" example:"[]"`    User        datatypes.JSON `json:"user"`}此過程已成功完成。但是當我嘗試將其解組OrgUserDisPublisherData.Disciplines為另一個具有time.Time數據類型的結構時。我收到以下錯誤 parsing time "\"2022-11-03 07:08:09.000000\"" as "\"2006-01-02T15:04:05Z07:00\"": cannot parse " 07:08:09.000000\"" as "T"用于解組的最終模型type Discipline struct {        Name              string    `json:"name"`        Code              string    `json:"code"`        IsPrimary         uint      `json:"isPrimary"`        IsAligned         uint      `json:"isAligned"`        IsTrainingFaculty uint      `json:"isTrainingFaculty"`        AlignmentDate     time.Time `json:"alignmentDate"`        UnalignmentDate   time.Time `json:"UnalignmentDate"`        ExpiryDate        time.Time `json:"expiryDate"`        ExternalId        string    `json:"externalId"`        Status            string    `json:"status"`        CreatedAt         time.Time `json:"createdAt"`        UpdatedAt         time.Time `json:"updatedAt"`    }同時,在向表中插入數據時使用了相同的模型,并且不會拋出任何與時間相關的錯誤。我如何在解組時處理時間,而不管針對時間屬性存在的數據如何?
查看完整描述

2 回答

?
慕神8447489

TA貢獻1780條經驗 獲得超1個贊

這里的問題是 GoLang 結構中日期/時間類型的默認 JSON 編組行為是使用 ISO8601 格式的日期/時間字符串。

這由錯誤消息中的格式字符串標識,帶有T日期和時間之間的分隔符以及時區后綴。JSON 字符串中的值Discipline不符合此格式,缺少T分隔符和任何時區。因此錯誤。

如果您可以影響 gorm 生成的 JSON 字符串的格式(我不熟悉,所以不能說您是否可以或如何這樣做),那么最簡單的解決方案是確保您的 JSON 字符串時間字段是格式為 ISO8601/RFC3339 字符串。

如果你無法控制它,那么你有兩個選擇:

  1. 通過中間體對 JSON 進行一些預處理map[string]any并重新格式化適當的字段。如果gorm格式至少是一致的,那么這可能就像在空格上拆分字符串一樣簡單,從時間中刪除最后的 3dps,附加一個適當的時區(或者只是如果時間是 UTC)然后用分隔符重新Z組裝T。

  2. 將自定義時間類型與json.Marshaller可以正確處理gorm格式化值的實現一起使用(您仍然需要知道哪個時區適用于持久值并在編組時正確應用)。

這兩者都容易受到日期/時間變量的 gorm 格式更改和誤用的影響(在選項 #1 的情況下未能進行預處理,在選項 #2 的情況下錯誤地使用而不是自定義類型time.Time) .

出于這個原因,如果可能的話,修改格式化輸出gorm將是我的首選方法。


查看完整回答
反對 回復 2023-03-15
?
搖曳的薔薇

TA貢獻1793條經驗 獲得超6個贊

最快的解決方案是按照@Deltics 的建議,在從數據庫中讀取數據/值時對其進行格式化。

在從數據庫查詢數據時,使用 DATE_FORMAT() 我將數據格式化為 go/json 所需的格式

DATE_FORMAT(actual_data, '%Y-%m-%dT%TZ')


查看完整回答
反對 回復 2023-03-15
  • 2 回答
  • 0 關注
  • 162 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號