2 回答
TA貢獻1829條經驗 獲得超4個贊
您應該檢查返回的錯誤。time.Parse()返回錯誤:
formattedTime, err := time.Parse(layout, dateTime)
if err != nil {
fmt.Println(err)
}
您的錯誤將在于'+'URL 查詢中的字符。URL 查詢使用URL 編碼,其中+符號是特殊的:它用于對空格字符進行編碼。所以當你這樣做時:
dateTime := request.URL.Query.Get("from")
您dateTime將包含解碼后的值,其中+將被空格替換。檢查它像:
fmt.Printf("%q\n", dateTime)
輸出:
"2015-02-11T15:01:00 00:00"
當然,這不是您指定的布局的有效格式,這會給您帶來以下錯誤:
解析時間“2015-02-11T15:01:00 00:00”為“2006-01-02T15:04:05Z07:00”:無法將“”解析為“Z07:00”
您必須%2B在 URL 查詢中使用+標志代碼,并且還必須包含Z您在布局中使用的字符:
GET /values?from=2015-02-11T15:01:00Z%2B00:00
還要注意,布局必須包含-07:00參考時區,而不是07:00:
layout := "2006-01-02T15:04:05Z-07:00"
然后輸出(formattedTime):
2015-02-11 15:01:00 +0000 UTC
在Go Playground上試試:
如果必須+在查詢中使用...
如果您必須使用+查詢(正如您在評論中聲稱的那樣),那么使用未轉義的值會很棘手,就好像查詢中的時區是+,它被替換為空格,但如果時區是-,則不是!
一種方法是使用原始查詢而不是解碼的查詢。這在URL.RawQuery.
下面是它假設只有1請求參數的解決方案:"from="。如果還有其他則失敗,請考慮:
param := "from="
layout := "2006-01-02T15:04:05-07:00"
length := len(param) + len(layout)
if s := request.URL.RawQuery; len(s) < length || !strings.HasPrefix(s, param) {
// unexpected query
}
dateTime := request.URL.RawQuery[len(param):length]
formattedTime, err := time.Parse(layout, dateTime)
if err != nil {
// handle error
}
TA貢獻1796條經驗 獲得超4個贊
您需要在時區偏移之前使用減號,因此布局應為:“2006-01-02T15:04:05-07:00”
https://golang.org/pkg/time/#pkg-constants:
Numeric time zone offsets format as follows:
-0700 ±hhmm
-07:00 ±hh:mm
-07 ±hh
示例:http : //play.golang.org/p/ZG979Meuxz
當你打印出來時,它使用默認格式,而不是你用來解析它的格式,因為它調用了 String 方法:https : //golang.org/pkg/time/#Time.String
要使用自定義格式對其進行格式化,請使用格式:https : //golang.org/pkg/time/#Time.Format
- 2 回答
- 0 關注
- 198 瀏覽
添加回答
舉報
