Funkcje daty dla Bicep

W tym artykule opisano funkcje Bicep do pracy z datami.

dateTimeAdd

dateTimeAdd(base, duration, [format])

Dodaje czas trwania do wartości podstawowej. Oczekiwano formatu ISO 8601.

Przestrzeń nazw: sys.

Parametry

Parametr Wymagania Type Opis
base Tak string Początkowa wartość daty/godziny dodawania. Użyj formatu znacznika czasu ISO 8601.
czas trwania Tak string Wartość czasu, która ma zostać dodana do bazy. Może to być wartość ujemna. Użyj formatu czasu trwania ISO 8601.
format Nie. string Format danych wyjściowych dla wyniku daty i godziny. Jeśli nie zostanie podana, zostanie użyty format wartości podstawowej. Użyj ciągów formatu standardowego lub ciągów formatu niestandardowego.

Wartość zwracana

Wartość daty/godziny, która wynika z dodania wartości czasu trwania do wartości podstawowej.

Uwagi

Funkcja dateTimeAdd nie bierze pod uwagę lat przestępnych, a P1Y należy interpretować jako P365D, podczas gdy P1M należy interpretować jako P30D. Poniższy plik Bicep przedstawia kilka przykładów:

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

W poprzednim przykładzie, biorąc pod uwagę rok 2023 jako rok nieprzestąpny, wynik dodawania jednego roku do początkowego dnia roku to 2024-01-01T00:00:00Z. Z drugiej strony, dodanie jednego roku do dnia początkowego 2024 r., rok przestępny, powoduje 2024-12-31T00:00:00Z, a nie 2025-01-01T00:00:00Z, biorąc pod uwagę, że rok przestępny obejmuje 366 dni zamiast 365 dni. Ponadto rozróżnienie między latami przestępnym i nieskocznia staje się widoczne podczas dodawania jednego miesiąca do pierwszego dnia lutego, co prowadzi do różnych wyników dnia miesiąca.

Przykłady

W poniższym przykładzie przedstawiono różne sposoby dodawania wartości czasu.

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

Po wdrożeniu poprzedniego przykładu z podstawowym czasem danych wyjściowych 2020-04-07 14:53:14Zsą następujące:

Nazwisko Typ Wartość
add3YearsOutput String 4/7/2023 2:53:14
odejmowanie 9DaysOutput String 29.03.2020 23:53:14
add1HourOutput String 4/7/2020 17:53:14

W następnym przykładzie pokazano, jak ustawić godzinę rozpoczęcia harmonogramu automatyzacji.

param omsAutomationAccountName string = 'demoAutomation'
param scheduleName string = 'demSchedule1'
param baseTime string = utcNow('u')

var startTime = dateTimeAdd(baseTime, 'PT1H')

...

resource scheduler 'Microsoft.Automation/automationAccounts/schedules@2022-08-08' = {
  name: concat(omsAutomationAccountName, '/', scheduleName)
  properties: {
    description: 'Demo Scheduler'
    startTime: startTime
    interval: 1
    frequency: 'Hour'
  }
}

dateTimeFromEpoch

dateTimeFromEpoch(epochTime)

Konwertuje wartość liczby całkowitej czasu epoki na wartość daty/godziny ISO 8601.

Przestrzeń nazw: sys.

Parametry

Parametr Wymagania Type Opis
epochTime Tak int Czas epoki, który ma być konwertowany na ciąg daty/godziny.

Wartość zwracana

Ciąg daty/godziny ISO 8601.

Uwagi

Ta funkcja wymaga interfejsu wiersza polecenia Bicep w wersji 0.5.X lub nowszej.

Przykład

W poniższym przykładzie przedstawiono wartości wyjściowe dla funkcji czasu epoki.

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

var convertedDatetime = dateTimeFromEpoch(convertedEpoch)

output epochValue int = convertedEpoch
output datetimeValue string = convertedDatetime

Dane wyjściowe to:

Nazwisko Typ Wartość
datetimeValue String 2023-05-02T15:16:13Z
epochValue Int 1683040573

dateTimeToEpoch

dateTimeToEpoch(dateTime)

Konwertuje ciąg daty/godziny ISO 8601 na wartość całkowitą czasu epoki.

Przestrzeń nazw: sys.

Parametry

Parametr Wymagania Type Opis
Data i godzina Tak string Ciąg daty/godziny, który ma być konwertowany na czas epoki.

Wartość zwracana

Liczba całkowita reprezentująca liczbę sekund od północy 1 stycznia 1970 roku.

Uwagi

Ta funkcja wymaga interfejsu wiersza polecenia Bicep w wersji 0.5.X lub nowszej.

Przykłady

W poniższym przykładzie przedstawiono wartości wyjściowe dla funkcji czasu epoki.

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

var convertedDatetime = dateTimeFromEpoch(convertedEpoch)

output epochValue int = convertedEpoch
output datetimeValue string = convertedDatetime

Dane wyjściowe to:

Nazwisko Typ Wartość
datetimeValue String 2023-05-02T15:16:13Z
epochValue Int 1683040573

W następnym przykładzie użyto wartości czasu epoki, aby ustawić wygaśnięcie klucza w magazynie kluczy.

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

Zwraca bieżącą wartość daty/godziny (UTC) w określonym formacie. Jeśli nie podano żadnego formatu, używany jest format ISO 8601 (yyyyMMddTHHmmssZ). Tej funkcji można używać tylko w wartości domyślnej parametru.

Przestrzeń nazw: sys.

Parametry

Parametr Wymagania Type Opis
format Nie. string Zakodowana wartość identyfikatora URI do konwersji na ciąg. Użyj ciągów formatu standardowego lub ciągów formatu niestandardowego.

Uwagi

Tej funkcji można używać tylko w wyrażeniu dla wartości domyślnej parametru. Użycie tej funkcji w dowolnym miejscu w pliku Bicep zwraca błąd. Funkcja nie jest dozwolona w innych częściach pliku Bicep, ponieważ zwraca inną wartość za każdym razem, gdy jest wywoływana. Wdrożenie tego samego pliku Bicep z tymi samymi parametrami nie spowodowałoby niezawodnego wygenerowania tych samych wyników.

Jeśli używasz opcji wycofania błędu do wcześniejszego pomyślnego wdrożenia, a wcześniejsze wdrożenie zawiera parametr, który używa utcNow, parametr nie jest ponownie oceniany. Zamiast tego wartość parametru z wcześniejszego wdrożenia jest automatycznie ponownie wykorzystywana we wdrożeniu wycofywania.

Zachowaj ostrożność podczas ponownego wdrażania pliku Bicep, który opiera się na funkcji utcNow dla wartości domyślnej. Po ponownym wdróżeniu i nie podaniu wartości parametru funkcja zostanie ponownie zceniona. Jeśli chcesz zaktualizować istniejący zasób, a nie utworzyć nowego, przekaż wartość parametru z wcześniejszego wdrożenia.

Wartość zwracana

Bieżąca wartość daty/godziny UTC.

Przykłady

W poniższym przykładzie przedstawiono różne formaty wartości daty/godziny.

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

Dane wyjściowe z poprzedniego przykładu różnią się w zależności od wdrożenia, ale będą podobne do następujących:

Nazwisko Typ Wartość
utcOutput string 20190305T175318Z
utcShortOutput string 03/05/2019
utcCustomOutput string 3 5

W następnym przykładzie pokazano, jak używać wartości z funkcji podczas ustawiania wartości tagu.

param utcShort string = utcNow('d')
param rgName string

resource myRg 'Microsoft.Resources/resourceGroups@2022-09-01' = {
  name: rgName
  location: 'westeurope'
  tags: {
    createdDate: utcShort
  }
}

output utcShortOutput string = utcShort

Następne kroki