Maison  >  Article  >  développement back-end  >  Formater l'heure Golang pour le SDK Azure

Formater l'heure Golang pour le SDK Azure

WBOY
WBOYavant
2024-02-10 13:03:081248parcourir

格式化 Azure SDK 的 golang 时间

l'éditeur php Xigua vous présentera comment formater l'heure golang du SDK Azure. Lors du développement à l’aide du SDK Azure, vous rencontrez souvent des situations où du temps de formatage est requis. Golang fournit certaines méthodes de formatage de l'heure intégrées, mais elles peuvent ne pas fonctionner correctement dans le SDK Azure. Pour résoudre ce problème, nous devons utiliser une méthode personnalisée pour formater l'heure. Voyons ensuite comment utiliser Golang pour formater l'heure dans le SDK Azure.

Contenu de la question

Considérez le golang suivant

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

Pourquoi cela n’est-il pas plus simple

t := time.Now()

?

Sur la base de mon expérience jusqu'à présent, j'aimerais confirmer si le code ci-dessus est équivalent (je pense que oui), ou pourquoi il ne l'est pas. J'ai également fourni quelques informations générales supplémentaires sur ce que j'essaie.

Mon code complet de référentiel se trouve dans le fichier main.go sur GitHub. Cependant, pour les besoins de cette question, concentrons-nous sur l'extrait de code fourni ci-dessous.

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)

Actuellement, ce code fonctionne comme prévu. Cependant, lorsque je simplifie la dernière ligne en t := time.Now() , cela provoque une erreur (comme indiqué dans le travail Run de Github Actions).

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

Cela me fait me demander pourquoi l'équivalence ne tient pas, contrairement à mon attente initiale.

Solution de contournement

L'API s'attend à ce que les temps soient arrondis à la seconde. Alors essayez quelque chose comme ceci :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer