Funkce data pro Bicep

Tento článek popisuje funkce Bicep pro práci s daty.

dateTimeAdd

dateTimeAdd(base, duration, [format])

Přidá časovou dobu k základní hodnotě. Očekává se formát ISO 8601.

Obor názvů: sys.

Parametry

Parametr Požaduje se Type Popis
base Ano string Počáteční hodnota data a času pro sčítání. Použijte formát časového razítka ISO 8601.
doba trvání Ano string Časová hodnota, která se má přidat do základu. Může to být záporná hodnota. Použijte formát doby trvání ISO 8601.
format No string Výstupní formát výsledku data a času. Pokud není zadaný, použije se formát základní hodnoty. Použijte standardní formátovací řetězce nebo vlastní formátovací řetězce.

Vrácená hodnota

Hodnota datetime, která je výsledkem přidání hodnoty doby trvání do základní hodnoty.

Poznámky

Funkce dateTimeAdd nebere v úvahu přestupné roky a P1Y by se měla interpretovat jako P365D, zatímco P1M by se měla interpretovat jako P30D. Následující soubor Bicep ukazuje několik příkladů:

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

V předchozím příkladu vzhledem k tomu, že rok 2023 není přestupný, výsledek přidání jednoho roku k počátečnímu dni roku je 2024-01-01T00:00:00Z. Pokud naopak přidáte jeden rok do počátečního dne roku 2024, přestupný rok, výsledkem je 2024-12-31T00:00:00Z, ne 2025-01-01T00:00:00Z vzhledem k tomu, že přestupný rok se skládá z 366 dnů místo 365 dnů. Kromě toho se při přidávání jednoho měsíce k prvnímu dni v únoru projeví rozdíl mezi přestupnými a ne přestupnými roky, což vede k různým výsledkům v měsíci.

Příklady

Následující příklad ukazuje různé způsoby přidání časových hodnot.

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

Při nasazení předchozího příkladu se základním časem 2020-04-07 14:53:14Zvýstupu:

Name Typ Hodnota
add3YearsOutput String 7.4.2023 2:53:14
subtract9DaysOutput String 29.3.2020 2:53:14
add1HourOutput String 7.4.2020 13:53:14

Následující příklad ukazuje, jak nastavit počáteční čas pro plán 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)

Převede celočíselnou hodnotu epochového času na hodnotu data a času ISO 8601.

Obor názvů: sys.

Parametry

Parametr Požaduje se Type Popis
epochTime Ano int Epocha, která se má převést na řetězec datetime.

Vrácená hodnota

Řetězec data a času ISO 8601.

Poznámky

Tato funkce vyžaduje rozhraní příkazového řádku Bicep verze 0.5.X nebo vyšší.

Příklad

Následující příklad ukazuje výstupní hodnoty pro funkce epochového času.

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

var convertedDatetime = dateTimeFromEpoch(convertedEpoch)

output epochValue int = convertedEpoch
output datetimeValue string = convertedDatetime

Výstup je:

Name Typ Hodnota
datetimeValue String 2023-05-02T15:16:13Z
epochValue Int 1683040573

dateTimeToEpoch

dateTimeToEpoch(dateTime)

Převede řetězec data a času ISO 8601 na celočíselnou hodnotu epochy.

Obor názvů: sys.

Parametry

Parametr Požaduje se Type Popis
data a času. Ano string Řetězec datetime, který se má převést na epochový čas.

Vrácená hodnota

Celé číslo, které představuje počet sekund od půlnoci 1. ledna 1970.

Poznámky

Tato funkce vyžaduje rozhraní příkazového řádku Bicep verze 0.5.X nebo vyšší.

Příklady

Následující příklad ukazuje výstupní hodnoty pro funkce epochového času.

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

var convertedDatetime = dateTimeFromEpoch(convertedEpoch)

output epochValue int = convertedEpoch
output datetimeValue string = convertedDatetime

Výstup je:

Name Typ Hodnota
datetimeValue String 2023-05-02T15:16:13Z
epochValue Int 1683040573

V dalším příkladu se k nastavení vypršení platnosti klíče v trezoru klíčů používá hodnota epochy.

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

Vrátí aktuální hodnotu data a času (UTC) v zadaném formátu. Pokud není k dispozici žádný formát, použije se formát ISO 8601 (yyyyMMddTHHmmssZ). Tuto funkci lze použít pouze ve výchozí hodnotě parametru.

Obor názvů: sys.

Parametry

Parametr Požaduje se Type Popis
format No string Zakódovaná hodnota identifikátoru URI, která se má převést na řetězec. Použijte standardní formátovací řetězce nebo vlastní formátovací řetězce.

Poznámky

Tuto funkci můžete použít pouze ve výrazu pro výchozí hodnotu parametru. Použití této funkce kdekoli jinde v souboru Bicep vrátí chybu. Funkce není povolená v jiných částech souboru Bicep, protože pokaždé, když se volá, vrátí jinou hodnotu. Nasazení stejného souboru Bicep se stejnými parametry by spolehlivě nezískuilo stejné výsledky.

Pokud použijete možnost vrácení chyby do dřívějšího úspěšného nasazení a dřívější nasazení obsahuje parametr, který používá utcNow, parametr se znovu nevyhodnotuje. Místo toho se hodnota parametru z předchozího nasazení automaticky znovu použije v nasazení vrácení zpět.

Při opětovném nasazení souboru Bicep, který pro výchozí hodnotu spoléhá na funkci UTCNow, buďte opatrní. Když znovu nasadíte parametr a nezadáte hodnotu parametru, funkce se znovu zhodnocuje. Pokud chcete místo vytvoření nového prostředku aktualizovat existující prostředek, předejte hodnotu parametru z předchozího nasazení.

Vrácená hodnota

Aktuální hodnota data a času UTC.

Příklady

Následující příklad ukazuje různé formáty pro hodnotu datetime.

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

Výstup z předchozího příkladu se pro každé nasazení liší, ale bude vypadat nějak takto:

Name Typ Hodnota
utcOutput string 20190305T175318Z
utcShortOutput string 03/05/2019
utcCustomOutput string 3 5

Následující příklad ukazuje, jak použít hodnotu z funkce při nastavování hodnoty značky.

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

Další kroky