Condividi tramite


Funzioni data per Bicep

Questo articolo descrive le funzioni Bicep per per operare con le date.

dateTimeAdd

dateTimeAdd(base, duration, [format])

Aggiunge una durata temporale a un valore di base. È previsto il formato ISO 8601.

Spazio dei nomi: sys.

Parametri

Parametro Richiesto Type Descrizione
base string Valore datetime iniziale per l'aggiunta. Usare il formato timestamp ISO 8601.
duration string Valore dell'ora da aggiungere alla base. Può essere un valore negativo. Usare il formato di durata ISO 8601.
format No string Formato di output per il risultato di data e ora. Se non specificato, viene utilizzato il formato del valore di base. Usare stringhe con formato standard oppure stringhe con formato personalizzato.

Valore restituito

Valore datetime risultante dall'aggiunta del valore di durata al valore di base.

Osservazioni:

La funzione dateTimeAdd non prende in considerazione gli anni bisestili e P1Y deve essere interpretato come P365D, mentre P1M deve essere interpretato come P30D. Il file Bicep seguente mostra alcuni esempi:

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

Nell'esempio precedente, considerando il 2023 come anno non bisestile, il risultato dell'aggiunta di un anno al giorno iniziale dell'anno è 2024-01-01T00:00:00Z. Viceversa, aggiungendo un anno al giorno iniziale del 2024, anno bisestile, si ottiene 2024-12-31T00:00:00Z, non 2025-01-01T00:00:00Z, dato che un anno bisestile è composto da 366 giorni invece di 365. Inoltre, la distinzione tra anni bisestili e non bisestili diventa evidente quando si aggiunge un mese al primo giorno di febbraio, portando a risultati variabili del giorno del mese.

Esempi

L'esempio seguente mostra diversi modi di aggiungere valori.

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

Quando l’esempio precedente viene distribuito con un tempo di base di 2020-04-07 14:53:14Z, l'output è:

Nome Type Valore
add3YearsOutput String 4/7/2023 2:53:14 PM
subtract9DaysOutput String 3/29/2020 2:53:14 PM
add1HourOutput String 4/7/2020 3:53:14 PM

L’esempio successivo mostra come impostare l'ora di inizio per una pianificazione di Automazione.

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

var startTime = dateTimeAdd(baseTime, 'PT1H')

...

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

dateTimeFromEpoch

dateTimeFromEpoch(epochTime)

Converte un valore di tipo tempo intero epoch in un valore datetime ISO 8601.

Spazio dei nomi: sys.

Parametri

Parametro Richiesto Type Descrizione
epochTime int Tempo epoch da convertire in una stringa datetime.

Valore restituito

Stringa datetime ISO 8601.

Osservazioni:

Questa funzione richiede l'interfaccia della riga di comando di Bicep versione 0.5.X o successiva.

Esempio

L'esempio seguente mostra i valori di output per le funzioni temporali epoch.

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

var convertedDatetime = dateTimeFromEpoch(convertedEpoch)

output epochValue int = convertedEpoch
output datetimeValue string = convertedDatetime

L'output è il seguente:

Nome Type Valore
datetimeValue String 2023-05-02T15:16:13Z
epochValue Int 1683040573

dateTimeToEpoch

dateTimeToEpoch(dateTime)

Converte una stringa datetime ISO 8601 in un valore intero temporale intero epoch.

Spazio dei nomi: sys.

Parametri

Parametro Richiesto Type Descrizione
dateTime string Stringa datetime da convertire in ora epoch.

Valore restituito

Un intero che rappresenta il numero di secondi dalla mezzanotte del 1° gennaio 1970.

Osservazioni:

Questa funzione richiede l'interfaccia della riga di comando di Bicep versione 0.5.X o successiva.

Esempi

L'esempio seguente mostra i valori di output per le funzioni temporali epoch.

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

var convertedDatetime = dateTimeFromEpoch(convertedEpoch)

output epochValue int = convertedEpoch
output datetimeValue string = convertedDatetime

L'output è il seguente:

Nome Type Valore
datetimeValue String 2023-05-02T15:16:13Z
epochValue Int 1683040573

Nell'esempio seguente viene usato il valore temporale epoch per impostare la scadenza di una chiave in un insieme di credenziali delle chiavi.

@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)

Restituisce il valore datetime corrente (UTC) nel formato specificato. Se non viene fornito alcun formato, viene usato il formato ISO 8601 (yyyyMMddTHHmmssZ). Questa funzione può essere usata solo nel valore predefinito per un parametro.

Spazio dei nomi: sys.

Parametri

Parametro Richiesto Type Descrizione
format No string Valore URI codificato da convertire in stringa. Usare stringhe con formato standard oppure stringhe con formato personalizzato.

Osservazioni:

È possibile utilizzare questa funzione solo all'interno di un'espressione per il valore predefinito di un parametro. L'uso di questa funzione in qualsiasi altra posizione in un file Bicep restituisce un errore. La funzione non è consentita in altre parti del file Bicep perché restituisce un valore diverso ogni volta che viene chiamato. Distribuire lo stesso file Bicep con gli stessi parametri non produce gli stessi risultati in modo affidabile.

Se si usa l'opzione per eseguire il ripristino dello stato precedente in caso di errore a una precedente distribuzione con esito positivo e la distribuzione precedente include un parametro che usa utcNow, il parametro non viene rivalutato. Al contrario, il valore del parametro della distribuzione precedente viene invece riutilizzato automaticamente nella distribuzione di ripristino.

Prestare attenzione alla ridistribuzione di un file Bicep che si basa sulla funzione utcNow per un valore predefinito. Quando si ridistribuisce e non si specifica un valore per il parametro, la funzione viene rivalutata. Se si vuole aggiornare una risorsa esistente anziché crearne una nuova, inserire il valore del parametro dalla distribuzione precedente.

Valore restituito

Valore datetime UTC corrente.

Esempi

L’esempio seguente mostra formati diversi per il valore datetime.

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

L'output dell'esempio precedente varia per ogni distribuzione, ma sarà simile a:

Nome Type Valore
utcOutput string 20190305T175318Z
utcShortOutput string 03/05/2019
utcCustomOutput string 3 5

L'esempio seguente mostra come usare un valore della funzione quando si imposta un valore di tag.

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

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

output utcShortOutput string = utcShort

Passaggi successivi