Datumfuncties voor Bicep
In dit artikel worden de Bicep-functies beschreven voor het werken met datums.
dateTimeAdd
dateTimeAdd(base, duration, [format])
Hiermee voegt u een tijdsduur toe aan een basiswaarde. ISO 8601-indeling wordt verwacht.
Naamruimte: sys.
Parameters
Parameter | Vereist | Type | Description |
---|---|---|---|
base | Ja | tekenreeks | De begindatum/tijd-waarde voor de optellen. Gebruik de ISO 8601-tijdstempelindeling. |
duur | Ja | tekenreeks | De tijdwaarde die moet worden toegevoegd aan de basis. Dit kan een negatieve waarde zijn. Gebruik de ISO 8601-duurnotatie. |
indeling | Nee | tekenreeks | De uitvoerindeling voor het resultaat van de datum/tijd. Als deze niet is opgegeven, wordt de notatie van de basiswaarde gebruikt. Gebruik tekenreeksen met standaardindeling of tekenreeksen met aangepaste notatie. |
Retourwaarde
De datum/tijd-waarde die het resultaat is van het toevoegen van de duurwaarde aan de basiswaarde.
Opmerkingen
De dateTimeAdd
functie neemt geen schrikkeljaren in overweging en P1Y moet worden geïnterpreteerd als P365D, terwijl P1M moet worden geïnterpreteerd als P30D. In het volgende Bicep-bestand ziet u enkele voorbeelden:
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
In het voorgaande voorbeeld, gezien 2023 als een niet-schrikkeljaar, is het resultaat van het toevoegen van één jaar aan de eerste dag van het jaar 2024-01-01T00:00:00Z. Als u daarentegen één jaar toevoegt aan de begindag van 2024, een schrikkeljaar, resulteert dit in 2024-12-31T00:00:00Z, niet 2025-01-01T00:00:00Z, aangezien een schrikkeljaar 366 dagen omvat in plaats van 365 dagen. Bovendien wordt het onderscheid tussen schrikkeljaren en niet-schrikkeljaren duidelijk wanneer u één maand toevoegt aan de eerste dag van februari, wat leidt tot verschillende dag-van-de-maandresultaten.
Voorbeelden
In het volgende voorbeeld ziet u verschillende manieren om tijdwaarden toe te voegen.
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
Wanneer het voorgaande voorbeeld wordt geïmplementeerd met een basistijd van 2020-04-07 14:53:14Z
, is de uitvoer:
Name | Type | Weergegeven als |
---|---|---|
add3YearsOutput | String | 7-4-2023 2:53:14 uur |
aftrekken vanDaysOutput | String | 29-3-2020 2:53:14 |
add1HourOutput | String | 7-4-2020 17:53:14 |
In het volgende voorbeeld ziet u hoe u de begintijd voor een Automation-planning instelt.
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)
Converteert een geheel getal in een tijdsperiode naar een ISO 8601-datum/tijd.
Naamruimte: sys.
Parameters
Parameter | Vereist | Type | Description |
---|---|---|---|
epochTime | Ja | int | De tijdsperiode die moet worden geconverteerd naar een datum/tijd-tekenreeks. |
Retourwaarde
Een ISO 8601-tekenreeks voor datum/tijd.
Opmerkingen
Voor deze functie is Bicep CLI versie 0.5.X of hoger vereist.
Opmerking
In het volgende voorbeeld ziet u uitvoerwaarden voor de tijdsperiodefuncties.
param convertedEpoch int = dateTimeToEpoch(dateTimeAdd(utcNow(), 'P1Y'))
var convertedDatetime = dateTimeFromEpoch(convertedEpoch)
output epochValue int = convertedEpoch
output datetimeValue string = convertedDatetime
De uitvoer is:
Name | Type | Weergegeven als |
---|---|---|
datetimeValue | String | 2023-05-02T15:16:13Z |
epochValue | Int | 1683040573 |
dateTimeToEpoch
dateTimeToEpoch(dateTime)
Converteert een ISO 8601-datum/tijd-tekenreeks naar een geheel getal in een periode.
Naamruimte: sys.
Parameters
Parameter | Vereist | Type | Description |
---|---|---|---|
dateTime | Ja | tekenreeks | De datum/tijd-tekenreeks die moet worden geconverteerd naar een tijdsperiode. |
Retourwaarde
Een geheel getal dat het aantal seconden aangeeft van middernacht op 1 januari 1970.
Opmerkingen
Voor deze functie is Bicep CLI versie 0.5.X of hoger vereist.
Voorbeelden
In het volgende voorbeeld ziet u uitvoerwaarden voor de tijdsperiodefuncties.
param convertedEpoch int = dateTimeToEpoch(dateTimeAdd(utcNow(), 'P1Y'))
var convertedDatetime = dateTimeFromEpoch(convertedEpoch)
output epochValue int = convertedEpoch
output datetimeValue string = convertedDatetime
De uitvoer is:
Name | Type | Weergegeven als |
---|---|---|
datetimeValue | String | 2023-05-02T15:16:13Z |
epochValue | Int | 1683040573 |
In het volgende voorbeeld wordt de tijdsduurwaarde gebruikt om de vervaldatum voor een sleutel in een sleutelkluis in te stellen.
@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)
Retourneert de huidige datum/tijd-waarde (UTC) in de opgegeven notatie. Als er geen indeling is opgegeven, wordt de ISO 8601(yyyyMMddTHHmmssZ
)-indeling gebruikt. Deze functie kan alleen worden gebruikt in de standaardwaarde voor een parameter.
Naamruimte: sys.
Parameters
Parameter | Vereist | Type | Description |
---|---|---|---|
indeling | Nee | tekenreeks | De gecodeerde URI-waarde die moet worden geconverteerd naar een tekenreeks. Gebruik tekenreeksen met standaardindeling of tekenreeksen met aangepaste notatie. |
Opmerkingen
U kunt deze functie alleen gebruiken in een expressie voor de standaardwaarde van een parameter. Als u deze functie ergens anders in een Bicep-bestand gebruikt, wordt een fout geretourneerd. De functie is niet toegestaan in andere delen van het Bicep-bestand, omdat deze elke keer dat deze wordt aangeroepen een andere waarde retourneert. Het implementeren van hetzelfde Bicep-bestand met dezelfde parameters zou niet betrouwbaar dezelfde resultaten opleveren.
Als u de optie gebruikt om een fout terug te draaien naar een eerdere geslaagde implementatie en de eerdere implementatie een parameter bevat die utcNow gebruikt, wordt de parameter niet opnieuw geëvalueerd. In plaats daarvan wordt de parameterwaarde van de eerdere implementatie automatisch opnieuw gebruikt in de rollback-implementatie.
Wees voorzichtig met het opnieuw implementeren van een Bicep-bestand dat afhankelijk is van de utcNow-functie voor een standaardwaarde. Wanneer u de parameter opnieuw implementeert en geen waarde opgeeft, wordt de functie opnieuw geëvalueerd. Als u een bestaande resource wilt bijwerken in plaats van een nieuwe resource te maken, geeft u de parameterwaarde van de eerdere implementatie door.
Retourwaarde
De huidige UTC-datum/tijd-waarde.
Voorbeelden
In het volgende voorbeeld ziet u verschillende notaties voor de datum/tijd-waarde.
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
De uitvoer van het vorige voorbeeld varieert voor elke implementatie, maar is vergelijkbaar met:
Name | Type | Weergegeven als |
---|---|---|
utcOutput | tekenreeks | 20190305T175318Z |
utcShortOutput | tekenreeks | 03/05/2019 |
utcCustomOutput | tekenreeks | 3 5 |
In het volgende voorbeeld ziet u hoe u een waarde van de functie gebruikt bij het instellen van een tagwaarde.
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
Volgende stappen
- Zie De structuur en syntaxis van Bicep-bestanden begrijpen voor een beschrijving van de secties in een Bicep-bestand.