Funciones de fecha para Bicep
En este artículo se describen las funciones de Bicep para trabajar con fechas.
dateTimeAdd
dateTimeAdd(base, duration, [format])
Agrega una duración de tiempo a un valor base. Se esperaba el formato ISO 8601.
Espacio de nombres: sys.
Parámetros
Parámetro | Obligatorio | Type | Descripción |
---|---|---|---|
base | Sí | string | Valor datetime inicial para la suma. Utilice el formato de marca de tiempo ISO 8601. |
duration | Sí | string | Valor de hora que se suma a la base. Puede ser un valor negativo. Utilice el formato de duración ISO 8601. |
format | No | string | El formato de salida del resultado de fecha y hora. Si no se indica, se usa el formato del valor base. Use cadenas de formato estándar o cadenas de formato personalizado. |
Valor devuelto
Valor datetime resultado de sumar el valor de duración al valor base.
Comentarios
La función dateTimeAdd
no tiene en cuenta años bisiestos y P1Y debe interpretarse como P365D, mientras que P1M debería interpretarse como P30D. En el siguiente archivo de Bicep se muestran algunos ejemplos:
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
En el ejemplo anterior, considerando 2023 como año no bisiesto, el resultado de agregar un año al día inicial del año es 2024-01-01T00:00:00Z. Por el contrario, agregar un año al día inicial de 2024, un año bisiesto, da como resultado 2024-12-31T00:00:00Z y no 2025-01-01T00:00:00Z, dado que un año bisiesto comprende 366 días en lugar de 365. Además, la distinción entre años bisiestos y no bisiestos se hace evidente al agregar un mes al primer día de febrero, lo que conduce a resultados variables del día del mes.
Ejemplos
En el ejemplo siguiente se muestran distintas formas de sumar valores de hora.
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
Cuando el ejemplo anterior se implementa con una hora base de 2020-04-07 14:53:14Z
, la salida es:
Nombre | Tipo | Value |
---|---|---|
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 |
En el ejemplo siguiente se muestra cómo establecer la hora de inicio de una programación de 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@2023-11-01' = {
name: concat(omsAutomationAccountName, '/', scheduleName)
properties: {
description: 'Demo Scheduler'
startTime: startTime
interval: 1
frequency: 'Hour'
}
}
dateTimeFromEpoch
dateTimeFromEpoch(epochTime)
Convierte un valor entero de hora de época en una fecha y hora ISO 8601.
Espacio de nombres: sys.
Parámetros
Parámetro | Obligatorio | Type | Descripción |
---|---|---|---|
epochTime | Sí | int | Hora de época que se va a convertir en una cadena datetime. |
Valor devuelto
Cadena datetime ISO 8601.
Comentarios
Para esta función se necesita la versión 0.5.X o posterior de la CLI de Bicep.
Ejemplo
En el ejemplo siguiente se muestran los valores de salida para las funciones de hora de época.
param convertedEpoch int = dateTimeToEpoch(dateTimeAdd(utcNow(), 'P1Y'))
var convertedDatetime = dateTimeFromEpoch(convertedEpoch)
output epochValue int = convertedEpoch
output datetimeValue string = convertedDatetime
La salida es la siguiente:
Nombre | Tipo | Valor |
---|---|---|
datetimeValue | String | 2023-05-02T15:16:13Z |
epochValue | Int | 1683040573 |
dateTimeToEpoch
dateTimeToEpoch(dateTime)
Convierte una cadena datetime ISO 8601 en un valor entero de hora de época.
Espacio de nombres: sys.
Parámetros
Parámetro | Obligatorio | Type | Descripción |
---|---|---|---|
dateTime | Sí | string | Cadena datetime que se va a convertir en una hora de época. |
Valor devuelto
Entero que representa el número de segundos desde la medianoche del 1 de enero de 1970.
Comentarios
Para esta función se necesita la versión 0.5.X o posterior de la CLI de Bicep.
Ejemplos
En el ejemplo siguiente se muestran los valores de salida para las funciones de hora de época.
param convertedEpoch int = dateTimeToEpoch(dateTimeAdd(utcNow(), 'P1Y'))
var convertedDatetime = dateTimeFromEpoch(convertedEpoch)
output epochValue int = convertedEpoch
output datetimeValue string = convertedDatetime
La salida es la siguiente:
Nombre | Tipo | Valor |
---|---|---|
datetimeValue | String | 2023-05-02T15:16:13Z |
epochValue | Int | 1683040573 |
En el ejemplo siguiente se usa el valor de hora de época para establecer la expiración de una clave en un almacén de claves.
@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)
Devuelve el valor de fecha y hora (UTC) actual en el formato especificado. Si no se proporciona el formato, se usa ISO 8601 (yyyyMMddTHHmmssZ
). Esta función solo puede utilizarse en el valor predeterminado para un parámetro.
Espacio de nombres: sys.
Parámetros
Parámetro | Obligatorio | Type | Descripción |
---|---|---|---|
format | No | string | El valor codificado por el identificador URI para convertir en una cadena. Use cadenas de formato estándar o cadenas de formato personalizado. |
Observaciones
Solo puede usar esta función dentro de una expresión para el valor predeterminado de un parámetro. El uso de esta función en cualquier otro lugar de un archivo de Bicep genera un error. La función no se permite en otras partes del archivo de Bicep porque devuelve un valor diferente cada vez que se le llama. La implementación del mismo archivo de Bicep con los mismos parámetros no produciría de forma confiable los mismos resultados.
Si usa la opción de revertir en caso de error a una implementación correcta anterior y dicha implementación incluye un parámetro que usa utcNow, el parámetro no se vuelve a evaluar. En su lugar, el valor del parámetro de la implementación anterior se reutiliza automáticamente en la implementación de reversión.
Tenga cuidado al volver a implementar un archivo de Bicep que se base en la función utcNow para un valor predeterminado. Si vuelve a implementar y no proporciona un valor para el parámetro, la función se vuelve a evaluar. Si desea actualizar un recurso existente en lugar de crear uno nuevo, pase el valor de parámetro de la implementación anterior.
Valor devuelto
El valor de fecha y hora UTC actual.
Ejemplos
En el siguiente ejemplo se muestran formatos diferentes para el valor de fecha y hora.
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
El resultado del ejemplo anterior varía para cada implementación, pero será similar a:
Nombre | Tipo | Value |
---|---|---|
utcOutput | string | 20190305T175318Z |
utcShortOutput | string | 05/03/2019 |
utcCustomOutput | string | 3 5 |
El ejemplo siguiente muestra cómo usar un valor de la función cuando se establece un valor de etiqueta.
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
Pasos siguientes
- Puede encontrar una descripción de las secciones de un archivo de Bicep en Nociones sobre la estructura y la sintaxis de los archivos de Bicep.