Datumfunktioner för Bicep

Den här artikeln beskriver Bicep-funktionerna för att arbeta med datum.

dateTimeLägg till

dateTimeAdd(base, duration, [format])

Lägger till en tidsvaraktighet i ett basvärde. ISO 8601-format förväntas.

Namnområde: sys.

Parametrar

Parameter Obligatoriskt Type Beskrivning
bas Ja sträng Startvärdet för datetime för tillägget. Använd ISO 8601-tidsstämpelformat.
varaktighet Ja sträng Tidsvärdet som ska läggas till i basen. Det kan vara ett negativt värde. Använd ISO 8601-varaktighetsformat.
format Nej sträng Utdataformatet för datumtidsresultatet. Om det inte anges används formatet för basvärdet. Använd antingen standardformatsträngar eller anpassade formatsträngar.

Returvärde

Datetime-värdet som resulterar i att varaktighetsvärdet läggs till i basvärdet.

Kommentarer

Funktionen dateTimeAdd tar inte hänsyn till skottår och P1Y ska tolkas som P365D, medan P1M ska tolkas som P30D. Följande Bicep-fil visar några exempel:

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

I föregående exempel, med tanke på 2023 som ett icke-skottår, är resultatet av att lägga till ett år till den första dagen på året 2024-01-01T00:00:00Z. Omvänt, att lägga till ett år till startdagen 2024, ett skottår, resulterar i 2024-12-31T00:00:00Z, inte 2025-01-01T00:00:00Z, med tanke på att ett skottår omfattar 366 dagar i stället för 365 dagar. Dessutom blir skillnaden mellan skott- och icke-skottår uppenbar när man lägger till en månad till den första dagen i februari, vilket leder till varierande resultat från månadens dag.

Exempel

I följande exempel visas olika sätt att lägga till tidsvärden.

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

När föregående exempel distribueras med bastiden 2020-04-07 14:53:14Zär utdata:

Namn Typ Värde
add3YearsOutput String 2023-04-07 14:53:14
subtract9DaysOutput String 2020-03-29 14:53:14
add1HourOutput String 2020-04-07 15:53:14

I nästa exempel visas hur du anger starttiden för ett Automation-schema.

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)

Konverterar ett tidstals heltalsvärde för epok till en ISO 8601-datetime.

Namnområde: sys.

Parametrar

Parameter Obligatoriskt Type Beskrivning
epochTime Ja heltal Tidsåtgången för att konvertera till en datetime-sträng.

Returvärde

En ISO 8601 datetime-sträng.

Kommentarer

Den här funktionen kräver Bicep CLI version 0.5.X eller senare.

Exempel

I följande exempel visas utdatavärden för epoktidsfunktionerna.

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

var convertedDatetime = dateTimeFromEpoch(convertedEpoch)

output epochValue int = convertedEpoch
output datetimeValue string = convertedDatetime

Resultatet är:

Namn Typ Värde
datetimeValue String 2023-05-02T15:16:13Z
epochValue Int 1683040573

dateTimeToEpoch

dateTimeToEpoch(dateTime)

Konverterar en ISO 8601 datetime-sträng till ett heltalsvärde för epoktid.

Namnområde: sys.

Parametrar

Parameter Obligatoriskt Type Beskrivning
Datetime Ja sträng Datetime-strängen som ska konverteras till en epoktid.

Returvärde

Ett heltal som representerar antalet sekunder från midnatt den 1 januari 1970.

Kommentarer

Den här funktionen kräver Bicep CLI version 0.5.X eller senare.

Exempel

I följande exempel visas utdatavärden för epoktidsfunktionerna.

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

var convertedDatetime = dateTimeFromEpoch(convertedEpoch)

output epochValue int = convertedEpoch
output datetimeValue string = convertedDatetime

Resultatet är:

Namn Typ Värde
datetimeValue String 2023-05-02T15:16:13Z
epochValue Int 1683040573

I nästa exempel används tidsvärdet epok för att ange förfallodatum för en nyckel i ett nyckelvalv.

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

Returnerar det aktuella datetime-värdet (UTC) i det angivna formatet. Om inget format anges används FORMATET ISO 8601 (yyyyMMddTHHmmssZ). Den här funktionen kan bara användas i standardvärdet för en parameter.

Namnområde: sys.

Parametrar

Parameter Obligatoriskt Type Beskrivning
format Nej sträng Det URI-kodade värdet som ska konverteras till en sträng. Använd antingen standardformatsträngar eller anpassade formatsträngar.

Kommentarer

Du kan bara använda den här funktionen i ett uttryck för standardvärdet för en parameter. Om du använder den här funktionen någon annanstans i en Bicep-fil returneras ett fel. Funktionen tillåts inte i andra delar av Bicep-filen eftersom den returnerar ett annat värde varje gång den anropas. Att distribuera samma Bicep-fil med samma parametrar skulle inte ge samma resultat på ett tillförlitligt sätt.

Om du använder alternativet för att återställa ett fel till en tidigare lyckad distribution, och den tidigare distributionen innehåller en parameter som använder utcNow, utvärderas inte parametern igen. I stället återanvänds parametervärdet från den tidigare distributionen automatiskt i återställningsdistributionen.

Var försiktig med att distribuera om en Bicep-fil som förlitar sig på utcNow-funktionen för ett standardvärde. När du distribuerar om och inte anger något värde för parametern utvärderas funktionen igen. Om du vill uppdatera en befintlig resurs i stället för att skapa en ny skickar du parametervärdet från den tidigare distributionen.

Returvärde

Det aktuella UTC-datetime-värdet.

Exempel

I följande exempel visas olika format för datetime-värdet.

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

Utdata från föregående exempel varierar för varje distribution men kommer att likna:

Namn Typ Värde
utcOutput sträng 20190305T175318Z
utcShortOutput sträng 03/05/2019
utcCustomOutput sträng 3 5

I nästa exempel visas hur du använder ett värde från funktionen när du anger ett taggvärde.

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

Nästa steg