Fonctions de date pour Bicep

Cet article décrit les fonctions Bicep pour l’utilisation de dates.

dateTimeAdd

dateTimeAdd(base, duration, [format])

Ajoute une durée à une valeur de base. Le format ISO 8601 est attendu.

Espace de noms : sys.

Paramètres

Paramètre Obligatoire Type Description
base Oui string Valeur datetime de début pour l’ajout. Utilisez le format d’horodatage ISO 8601.
duration Oui string Valeur de temps à ajouter à la base. Il peut s’agir d’une valeur négative. Utilisez le format de durée ISO 8601.
format Non string Format de sortie pour le résultat de date et d’heure. S’il n’est pas fourni, le format de la valeur de base est utilisé. Utilisez des chaînes de format standard ou des chaînes de format personnalisé.

Valeur retournée

Valeur datetime qui résulte de l’ajout de la valeur de durée à la valeur de base.

Notes

La fonction dateTimeAdd ne prend pas en compte les années bissextiles et P1Y doit être interprété comme P365D, tandis que P1M doit être interprété comme P30D. Le fichier Bicep suivant contient quelques exemples :

output addOneYearNonLeap string = dateTimeAdd('2023-01-01 00:00:00Z', 'P1Y') //2024-01-01T00:00:00Z
output addOneYearLeap string = dateTimeAdd('2024-01-01 00:00:00Z', 'P1Y')  //2024-12-31T00:00:00Z

output addOneMonthNonLeap string = dateTimeAdd('2023-02-01 00:00:00Z', 'P1M') //2023-03-03T00:00:00Z
output addOneMonthLeap string = dateTimeAdd('2024-02-01 00:00:00Z', 'P1M') //2023-03-02T00:00:00Z

Dans l’exemple précédent, 2023 n’étant pas une année bissextile, le résultat de l’ajout d’une année au premier jour de l’année est 2024-01-01T00:00:00Z. À l’inverse, l’ajout d’une année au premier jour de 2024, une année bissextile, a comme résultat 2024-12-31T00:00:00Z et non pas 2025-01-01T00:00:00Z, étant donné qu’une année bissextile comprend 366 jours au lieu de 365. En outre, la distinction entre les années bissextiles et les années non bissextiles devient évidente lors de l’ajout d’un mois au premier jour de février, ce qui entraîne une variation des résultats du jour du mois.

Exemples

L’exemple suivant montre différentes façons d’ajouter des valeurs de temps.

param baseTime string = utcNow('u')

var add3Years = dateTimeAdd(baseTime, 'P3Y')
var subtract9Days = dateTimeAdd(baseTime, '-P9D')
var add1Hour = dateTimeAdd(baseTime, 'PT1H')

output add3YearsOutput string = add3Years
output subtract9DaysOutput string = subtract9Days
output add1HourOutput string = add1Hour

Lorsque le modèle précédent est déployé avec la valeur de temps de base 2020-04-07 14:53:14Z, la sortie est la suivante :

Nom Type Valeur
add3YearsOutput String 7/4/2023 14:53:14
subtract9DaysOutput String 29/3/2020 14:53:14
add1HourOutput String 7/4/2023 15:53:14

L’exemple suivant montre comment définir l’heure de début d’une planification Automation.

param omsAutomationAccountName string = 'demoAutomation'
param scheduleName string = 'demSchedule1'
param baseTime string = utcNow('u')

var startTime = dateTimeAdd(baseTime, 'PT1H')

...

resource scheduler 'Microsoft.Automation/automationAccounts/schedules@2022-08-08' = {
  name: concat(omsAutomationAccountName, '/', scheduleName)
  properties: {
    description: 'Demo Scheduler'
    startTime: startTime
    interval: 1
    frequency: 'Hour'
  }
}

dateTimeFromEpoch

dateTimeFromEpoch(epochTime)

Convertit une valeur entière d’heure epoch en DateHeure ISO 8601.

Espace de noms : sys.

Paramètres

Paramètre Obligatoire Type Description
epochTime Oui int Heure epoch à convertir en chaîne DateHeure.

Valeur retournée

Chaîne DateHeure ISO 8601.

Notes

Cette fonction nécessite Bicep CLI version 0.5.X ou ultérieure.

Exemple

L’exemple suivant montre les valeurs de sortie pour les fonctions d’heure epoch.

param convertedEpoch int = dateTimeToEpoch(dateTimeAdd(utcNow(), 'P1Y'))

var convertedDatetime = dateTimeFromEpoch(convertedEpoch)

output epochValue int = convertedEpoch
output datetimeValue string = convertedDatetime

La sortie est la suivante :

Nom Type Valeur
datetimeValue String 2023-05-02T15:16:13Z
epochValue Int 1683040573

dateTimeToEpoch

dateTimeToEpoch(dateTime)

Convertit une chaîne DateHeure ISO 8601 en valeur entière d’heure epoch.

Espace de noms : sys.

Paramètres

Paramètre Obligatoire Type Description
dateTime Oui string Chaîne DateHeure à convertir en heure epoch.

Valeur retournée

Entier qui représente le nombre de secondes à compter de minuit le 1er janvier 1970.

Notes

Cette fonction nécessite Bicep CLI version 0.5.X ou ultérieure.

Exemples

L’exemple suivant montre les valeurs de sortie pour les fonctions d’heure epoch.

param convertedEpoch int = dateTimeToEpoch(dateTimeAdd(utcNow(), 'P1Y'))

var convertedDatetime = dateTimeFromEpoch(convertedEpoch)

output epochValue int = convertedEpoch
output datetimeValue string = convertedDatetime

La sortie est la suivante :

Nom Type Valeur
datetimeValue String 2023-05-02T15:16:13Z
epochValue Int 1683040573

L’exemple suivant utilise la valeur d’heure epoch pour définir l’expiration d’une clé dans un coffre de clés.

@description('The location into which the resources should be deployed.')
param location string = resourceGroup().location

@description('The Tenant Id that should be used throughout the deployment.')
param tenantId string = subscription().tenantId

@description('The name of the existing User Assigned Identity.')
param userAssignedIdentityName string

@description('The name of the resource group for the User Assigned Identity.')
param userAssignedIdentityResourceGroupName string

@description('The name of the Key Vault.')
param keyVaultName string  = 'vault-${uniqueString(resourceGroup().id)}'

@description('Name of the key in the Key Vault')
param keyVaultKeyName string = 'cmkey'

@description('Expiration time of the key')
param keyExpiration int = dateTimeToEpoch(dateTimeAdd(utcNow(), 'P1Y'))

@description('The name of the Storage Account')
param storageAccountName string =  'storage${uniqueString(resourceGroup().id)}'


resource userAssignedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2018-11-30' existing = {
  scope: resourceGroup(userAssignedIdentityResourceGroupName)
  name: userAssignedIdentityName  
}

resource keyVault 'Microsoft.KeyVault/vaults@2021-10-01' = {
  name: keyVaultName
  location: location
  properties: {
    sku: {
      name: 'standard'
      family: 'A'
    }
    enableSoftDelete: true
    enablePurgeProtection: true
    enabledForDiskEncryption: true
    tenantId: tenantId
    accessPolicies: [
      {
        tenantId: tenantId
        permissions: {
          keys: [
            'unwrapKey'
            'wrapKey'
            'get'
          ]
        }
        objectId: userAssignedIdentity.properties.principalId
      }
    ]
  }
}

resource kvKey 'Microsoft.KeyVault/vaults/keys@2021-10-01' = {
  parent: keyVault
  name: keyVaultKeyName
  properties: {
    attributes: {
      enabled: true
      exp: keyExpiration
    }
    keySize: 4096
    kty: 'RSA'
  }
}

resource storage 'Microsoft.Storage/storageAccounts@2021-04-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  identity: {
    type: 'UserAssigned'
    userAssignedIdentities: {
      '${userAssignedIdentity.id}': {}
    }
  }
  properties: {
    accessTier: 'Hot'
    supportsHttpsTrafficOnly: true
    minimumTlsVersion: 'TLS1_2'
    encryption: {
      identity: {
        userAssignedIdentity: userAssignedIdentity.id
      }
      services: {
         blob: {
           enabled: true
         }
      }
      keySource: 'Microsoft.Keyvault'
      keyvaultproperties: {
        keyname: kvKey.name
        keyvaulturi: endsWith(keyVault.properties.vaultUri,'/') ? substring(keyVault.properties.vaultUri,0,length(keyVault.properties.vaultUri)-1) : keyVault.properties.vaultUri
      }
    }
  }
}

utcNow

utcNow(format)

Retourne la valeur de date/heure (UTC) actuelle au format spécifié. Si aucun format n’est indiqué, le format utilisé est ISO 8601 (yyyyMMddTHHmmssZ). Cette fonction peut uniquement être utilisée dans la valeur par défaut d’un paramètre.

Espace de noms : sys.

Paramètres

Paramètre Obligatoire Type Description
format Non string Valeur encodée de l’URI à convertir en une chaîne. Utilisez des chaînes de format standard ou des chaînes de format personnalisé.

Notes

Vous pouvez uniquement utiliser cette fonction dans une expression pour la valeur par défaut d’un paramètre. Son utilisation partout ailleurs dans un fichier Bicep retourne une erreur. La fonction n’est pas autorisée dans d’autres parties du fichier Bicep, car elle retourne une valeur différente chaque fois qu’elle est appelée. Le déploiement du même fichier Bicep avec les mêmes paramètres ne produit pas forcément les mêmes résultats.

Si vous choisissez l’option de restauration en cas d’erreur d’un déploiement antérieur ayant abouti et que celui-ci comprend un paramètre qui utilise utcNow, le paramètre n’est pas réévalué. Au lieu de cela, la valeur du paramètre du déploiement précédent est automatiquement réutilisée dans le déploiement de la restauration.

Soyez prudent quand vous redéployez un fichier Bicep basé sur la fonction utcNow pour une valeur par défaut. Si vous effectuez un tel déploiement sans fournir de valeur pour le paramètre, la fonction est réévaluée. Si vous souhaitez mettre à jour une ressource existante au lieu d’en créer une autre, passez la valeur du paramètre qui était utilisée dans le déploiement précédent.

Valeur retournée

Valeur de date/heure UTC actuelle.

Exemples

L’exemple suivant montre des formats différents pour la valeur de date/heure.

param utcValue string = utcNow()
param utcShortValue string = utcNow('d')
param utcCustomValue string = utcNow('M d')

output utcOutput string = utcValue
output utcShortOutput string = utcShortValue
output utcCustomOutput string = utcCustomValue

La sortie de l’exemple précédent varie pour chaque déploiement, mais elle sera semblable à celle-ci :

Nom Type Valeur
utcOutput string 20190305T175318Z
utcShortOutput string 03/05/2019
utcCustomOutput string 3 5

L’exemple suivant montre comment utiliser une valeur de la fonction pour définir une valeur de balise.

param utcShort string = utcNow('d')
param rgName string

resource myRg 'Microsoft.Resources/resourceGroups@2022-09-01' = {
  name: rgName
  location: 'westeurope'
  tags: {
    createdDate: utcShort
  }
}

output utcShortOutput string = utcShort

Étapes suivantes