Share via


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