首頁 > 後端開發 > Golang > 主體

格式化 Azure SDK 的 golang 時間

WBOY
發布: 2024-02-10 13:03:08
轉載
1245 人瀏覽過

格式化 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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!