Heim  >  Artikel  >  Backend-Entwicklung  >  Formatieren Sie die Golang-Zeit für das Azure SDK

Formatieren Sie die Golang-Zeit für das Azure SDK

WBOY
WBOYnach vorne
2024-02-10 13:03:081246Durchsuche

格式化 Azure SDK 的 golang 时间

php-Editor Xigua stellt Ihnen vor, wie Sie die Golang-Zeit des Azure SDK formatieren. Bei der Entwicklung mit dem Azure SDK kommt es häufig zu Situationen, in denen Formatierungszeit erforderlich ist. Golang bietet einige integrierte Zeitformatierungsmethoden, diese funktionieren jedoch möglicherweise nicht ordnungsgemäß im Azure SDK. Um dieses Problem zu lösen, müssen wir eine benutzerdefinierte Methode zum Formatieren der Uhrzeit verwenden. Schauen wir uns als Nächstes an, wie Sie mit Golang die Zeit im Azure SDK formatieren.

Frageninhalt

Bedenken Sie den folgenden Golang

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

Warum ist das nicht einfacher

t := time.Now()

?

Basierend auf meinen bisherigen Erfahrungen möchte ich bestätigen, ob der obige Code gleichwertig ist (ich denke, dass er es ist) oder warum er nicht gleichwertig ist. Ich habe auch einige weitere Hintergrundinformationen zu dem bereitgestellt, was ich versuche.

Mein vollständiger Repository-Code befindet sich in der main.go-Datei auf GitHub. Für diese Frage konzentrieren wir uns jedoch auf den unten bereitgestellten Codeausschnitt.

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)

Derzeit funktioniert dieser Code wie erwartet. Wenn ich jedoch die letzte Zeile zu t := time.Now() vereinfache, verursacht dies einen Fehler (wie im Run-Job von Github Actions gezeigt).

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

Das lässt mich fragen, warum die Gleichwertigkeit entgegen meiner ursprünglichen Erwartung nicht gilt.

Problemumgehung

Die API erwartet, dass die Zeiten auf Sekunden gerundet werden. Versuchen Sie also etwas wie Folgendes:

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

Das obige ist der detaillierte Inhalt vonFormatieren Sie die Golang-Zeit für das Azure SDK. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen