Teilen über


Datumsfunktionen für Bicep

In diesem Artikel werden die Bicep-Funktionen für die Arbeit mit Datumsangaben beschrieben.

dateTimeAdd

dateTimeAdd(base, duration, [format])

Hiermit wird einem Basiswert eine Dauer hinzugefügt. ISO 8601-Format wird erwartet.

Namespace: sys.

Parameter

Parameter Erforderlich Type BESCHREIBUNG
base Ja Zeichenfolge Der datetime-Startwert für die Hinzufügung. Verwenden Sie das Zeitstempelformat nach ISO 8601.
duration Ja Zeichenfolge Der Zeitwert, der der Basis hinzugefügt werden soll. Dieser darf kein negativer Wert sein. Verwenden Sie das Format der Zeitspanne nach ISO 8601.
format Nein Zeichenfolge Das Ausgabeformat für das datetime-Ergebnis. Ist dieser Wert nicht angegeben, wird das Format des Basiswerts verwendet. Verwenden Sie entweder Standardformatzeichenfolgen oder benutzerdefinierte Formatzeichenfolgen.

Rückgabewert

Der datetime-Wert, der durch Hinzufügen der Dauer zum Basiswert erhalten wird.

Hinweise

Die dateTimeAdd-Funktion berücksichtigt keine Schaltjahre, und P1Y sollte als P365D interpretiert werden, während P1M als P30D interpretiert werden sollte. Die folgende Bicep-Datei zeigt einige Beispiele:

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

Im vorstehenden Beispiel ist unter Berücksichtigung des Jahres 2023 als Nicht-Schaltjahr das Ergebnis der Hinzufügung eines Jahres zum ersten Tag des Jahres 2024-01-01T00:00:00Z. Umgekehrt ergibt das Hinzufügen eines Jahres zum ersten Tag von 2024, ein Schaltjahr, 2024-12-31T00:00:00Z und nicht 2025-01-01T00:00:00Z. Die Voraussetzung ist, dass ein Schaltjahr 366 Tage anstelle von 365 umfasst. Des Weiteren wird die Unterscheidung zwischen Schaltjahren und Nicht-Schaltjahren deutlich, wenn ein Monat zum ersten Tag im Februar hinzugefügt wird, was zu unterschiedlichen Tagesergebnissen führt.

Beispiele

Im folgenden Beispiel werden verschiedene Möglichkeiten zum Hinzufügen von time-Werten veranschaulicht.

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

Wenn das obige Beispiel mit dem time-Basiswert 2020-04-07 14:53:14Z bereitgestellt wird, erhalten Sie folgende Ausgabe:

Name type Wert
add3YearsOutput String 07.04.2023 14:53:14
subtract9DaysOutput String 29.03.2020 14:53:14
add1HourOutput String 07.04.2020 15:53:14

Im nächsten Beispiel wird veranschaulicht, wie die Startzeit für einen Automation-Zeitplan festgelegt wird.

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)

Wandelt einen ganzzahligen Unix-Zeitwert (Epoch) in einen ISO 8601-DateTime-Wert um.

Namespace: sys

Parameter

Parameter Erforderlich Type BESCHREIBUNG
epochTime Ja INT Die Unix-Zeit (Epoch), die in eine DateTime-Zeichenfolge konvertiert werden soll.

Rückgabewert

Eine ISO 8601-DateTime-Zeichenfolge.

Hinweise

Diese Funktion erfordert Bicep CLI Version 0.5.X oder höher.

Beispiel

Das folgende Beispiel zeigt Ausgabewerte für die Unix-Zeitfunktionen (Epoch) an.

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

var convertedDatetime = dateTimeFromEpoch(convertedEpoch)

output epochValue int = convertedEpoch
output datetimeValue string = convertedDatetime

Die Ausgabe ist:

Name type Wert
datetimeValue String 2023-05-02T15:16:13Z
epochValue Int 1683040573

dateTimeToEpoch

dateTimeToEpoch(dateTime)

Wandelt einen ISO 8601-DateTime-Wert in einen ganzzahligen Unix-Zeitwert (Epoch) um.

Namespace: sys.

Parameter

Parameter Erforderlich Type BESCHREIBUNG
dateTime Ja Zeichenfolge Die DateTime-Zeichenfolge, die in eine Unix-Zeit (Epoch) konvertiert werden soll.

Rückgabewert

Eine ganze Zahl, die die Anzahl der Sekunden seit Mitternacht am 1. Januar 1970 darstellt.

Hinweise

Diese Funktion erfordert Bicep CLI Version 0.5.X oder höher.

Beispiele

Das folgende Beispiel zeigt Ausgabewerte für die Unix-Zeitfunktionen (Epoch) an.

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

var convertedDatetime = dateTimeFromEpoch(convertedEpoch)

output epochValue int = convertedEpoch
output datetimeValue string = convertedDatetime

Die Ausgabe ist:

Name type Wert
datetimeValue String 2023-05-02T15:16:13Z
epochValue Int 1683040573

Im nächsten Beispiel wird der Unix-Zeitwert (Epoch) verwendet, um den Ablauf für einen Schlüssel in einem Schlüsseltresor festzulegen.

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

Gibt den aktuellen datetime-Wert (UTC) im festgelegten Format zurück. Wenn kein Format angegeben wird, wird das ISO 8601-Format (yyyyMMddTHHmmssZ) verwendet. Diese Funktion kann nur für den Standardwert eines Parameters verwendet werden.

Namespace: sys.

Parameter

Parameter Erforderlich Type BESCHREIBUNG
format Nein Zeichenfolge Der als URI codierte Wert, der in eine Zeichenfolge konvertiert werden soll. Verwenden Sie entweder Standardformatzeichenfolgen oder benutzerdefinierte Formatzeichenfolgen.

Bemerkungen

Sie können diese Funktion nur in einem Ausdruck für den Standardwert eines Parameters verwenden. Wenn diese Funktion an einer anderen Stelle in einer Bicep-Datei verwendet wird, wird ein Fehler zurückgegeben. Die Funktion ist in anderen Teilen der Bicep-Datei nicht zulässig, da bei jedem Aufruf ein anderer Wert zurückgegeben wird. Das Bereitstellen derselben Bicep-Datei mit denselben Parametern würde nicht zuverlässig zu denselben Ergebnissen führen.

Wenn Sie die Option für ein Rollback zu einer vorherigen erfolgreichen Bereitstellung bei einem Fehler verwenden und die vorherige Bereitstellung einen Parameter enthält, der die Funktion „utcNow“ nutzt, wird dieser Parameter nicht erneut ausgewertet. Stattdessen wird der Parameterwert der vorherigen Bereitstellung in der Rollbackbereitstellung automatisch wiederverwendet.

Seien Sie vorsichtig, wenn Sie eine Bicep-Datei erneut bereitstellen, die die utcNow-Funktion für einen Standardwert nutzt. Wenn Sie die erneute Bereitstellung durchführen und keinen Wert für den Parameter bereitstellen, wird die Funktion erneut ausgewertet. Wenn Sie eine vorhandene Ressource aktualisieren möchten, anstatt eine neue zu erstellen, übergeben Sie den Parameterwert aus der früheren Bereitstellung.

Rückgabewert

Der aktuelle UTC-datetime-Wert

Beispiele

Im folgenden Beispiel werden verschiedene Formate für den datetime-Wert veranschaulicht.

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

Die Ausgabe des vorherigen Beispiels variiert bei jeder Bereitstellung. Sie sollte jedoch folgender ähneln:

Name type Wert
utcOutput Zeichenfolge 20190305T175318Z
utcShortOutput Zeichenfolge 03/05/2019
utcCustomOutput Zeichenfolge 3 5

Im folgenden Beispiel wird gezeigt, wie ein Wert der Funktion beim Festlegen eines Tagwerts verwendet wird.

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ächste Schritte