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:14Z
są 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@2023-11-01' = {
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@2024-03-01' = {
name: rgName
location: 'westeurope'
tags: {
createdDate: utcShort
}
}
output utcShortOutput string = utcShort
Następne kroki
- Opis sekcji w pliku Bicep można znaleźć w temacie Understand the structure and syntax of Bicep files (Opis struktury i składni plików Bicep).