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 | Sì | string | Valore datetime iniziale per l'aggiunta. Usare il formato timestamp ISO 8601. |
duration | Sì | 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 | Sì | 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 | Sì | 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
- Per una descrizione delle sezioni in un file Bicep, vedere Informazioni sulla struttura e la sintassi dei file Bicep.