首頁  >  文章  >  後端開發  >  格式化 Azure SDK 的 golang 時間

格式化 Azure SDK 的 golang 時間

WBOY
WBOY轉載
2024-02-10 13:03:081246瀏覽

格式化 Azure SDK 的 golang 时间

php小編西瓜為您介紹如何格式化Azure SDK的golang時間。在使用Azure SDK進行開發時,經常會遇到需要格式化時間的情況。 Golang提供了一些內建的時間格式化方法,但它們在Azure SDK中可能無法正常運作。為了解決這個問題,我們需要使用自訂的方法來格式化時間。接下來,讓我們一起來看看如何使用golang來格式化Azure SDK中的時間。

問題內容

考慮以下 golang

today :=  time.Now().Format("2006-01-02T03:04:05.9999999Z")
t, _ := time.Parse(time.RFC3339Nano, today)

為什麼這不等於更簡單的

t := time.Now()

根據我目前的經驗,我想確認上面的程式碼是否等效(我認為是等效的),或者為什麼不是等效的。我還提供了有關我所嘗試的更多背景資訊。

我的完整儲存庫程式碼位於 GitHub 的 main.go 檔案中。但是,出於本問題的目的,讓我們專注於下面提供的程式碼片段。

sasToken, err := client.ListAccountSAS(
    ctx, resourceGroupName, storageAccountName, armstorage.AccountSasParameters{
    KeyToSign:              to.Ptr("key1"),
    SharedAccessExpiryTime: to.Ptr(func() time.Time { 
        t, _ := time.Parse(time.RFC3339Nano, tomorrow); return t }()),
    Permissions:            to.Ptr(armstorage.PermissionsR),
    Protocols:              to.Ptr(armstorage.HTTPProtocolHTTPSHTTP),
    ResourceTypes:          to.Ptr(armstorage.SignedResourceTypesS),
    Services:               to.Ptr(armstorage.ServicesB),
    SharedAccessStartTime:  to.Ptr(func() time.Time { 
        t, _ := time.Parse(time.RFC3339Nano, today); return t }()),
}, nil)

目前,此程式碼可以按預期運行。但是,當我將最後一行簡化為 t := time.Now() 時,會導致錯誤(如 Github Actions 的 Run job 所示)。

today 2023-09-18T07:54:42.6314723Z should be formatted as 2023-09-16T11:42:03.1567373Z
tomorrow 2023-09-19T07:54:42.6314723Z should be formattes as 2023-09-17T11:42:03.1567373Z
2023/09/18 07:54:43 POST https://management.azure.com/subscriptions/***/resourceGroups/go-azure-sdk/providers/Microsoft.Storage/storageAccounts/golangazure/ListAccountSas
--------------------------------------------------------------------------------
RESPONSE 400: 400 Bad Request
ERROR CODE: InvalidValuesForRequestParameters
--------------------------------------------------------------------------------
{
  "error": {
    "code": "InvalidValuesForRequestParameters",
    "message": "Values for request parameters are invalid: signedStart."
  }
}
--------------------------------------------------------------------------------
exit status 1

這讓我質疑為什麼等價性不成立,這與我最初的預期相反。

解決方法

此 API 期望時間會四捨五入到秒。所以嘗試這樣的事情:

...
            SharedAccessExpiryTime: to.Ptr(expiryTime.Round(time.Second)),
...
            SharedAccessStartTime:  to.Ptr(startTime.Round(time.Second)),
...

以上是格式化 Azure SDK 的 golang 時間的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除