Format golang time for Azure SDK

WBOY
Release: 2024-02-10 13:03:08
forward
1246 people have browsed it

格式化 Azure SDK 的 golang 时间

php Editor Xigua will introduce you how to format the golang time of Azure SDK. When developing using the Azure SDK, you often encounter situations where formatting time is required. Golang provides some built-in time formatting methods, but they may not work properly in Azure SDK. To solve this problem, we need to use a custom method to format the time. Next, let's take a look at how to use golang to format time in Azure SDK.

Question content

Consider the following golang

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

Why doesn’t this equal the simpler

t := time.Now()
Copy after login

?

Based on my experience so far, I would like to confirm if the above code is equivalent (I think it is), or why it is not equivalent. I've also provided some more background information on what I'm trying.

My complete repository code is located in the main.go file on GitHub. However, for the purpose of this question, let's focus on the code snippet provided below.

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)
Copy after login

Currently, this code works as expected. However, when I simplify the last line to t := time.Now() it results in an error (as shown in 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
Copy after login

This leads me to question why equivalence does not hold, contrary to my initial expectations.

Workaround

The API expects times to be rounded to seconds. So try something like this:

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

The above is the detailed content of Format golang time for Azure SDK. For more information, please follow other related articles on the PHP Chinese website!

source:stackoverflow.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!