Функции для работы с датами в Bicep
В этой статье описаны функции Bicep для работы с датами.
dateTimeAdd
dateTimeAdd(base, duration, [format])
Добавляет к базовому значению интервал времени. Ожидается формат ISO 8601.
Пространство имен: sys.
Параметры
Параметр | Обязательное поле | Type | Описание |
---|---|---|---|
base | Да | строка | Начальное значение datetime, к которому добавляется интервал. Используйте формат метки времени ISO 8601. |
duration | Да | строка | Значение интервала времени, добавляемое к начальному значению. Может быть отрицательным. Используется формат интервала времени ISO 8601. |
format | Нет | строка | Формат выходных данных для результата даты и времени. Если не указан, используется формат начального значения. Используйте либо строки в стандартном формате, либо строки в настраиваемом формате. |
Возвращаемое значение
Значение datetime, полученное в результате добавления интервала времени в начальное значение.
Замечания
Функция dateTimeAdd
не принимает во внимание високосные годы, и P1Y следует интерпретировать как P365D, а P1M следует интерпретировать как P30D. В следующем файле Bicep показаны некоторые примеры:
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
В предыдущем примере, учитывая 2023 год в качестве непрыжного года, результат добавления одного года в начальный день года — 2024-01-01T00:00:00:00Z. И наоборот, добавление одного года в начальный день 2024 года, високосный год, приводит к 2024-12-31T00:00:00Z, а не 2025-01-01T00:00Z, учитывая, что високосный год составляет 366 дней вместо 365 дней. Кроме того, различие между прыжками и непрыжными годами становится очевидным при добавлении одного месяца в первый день февраля, что приводит к разным результатам дня месяца.
Примеры
В следующем примере показаны различные способы добавления интервалов времени.
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
При развертывании предыдущего примера с начальным временем 2020-04-07 14:53:14Z
выводится следующее.
Имя. | Тип | значение |
---|---|---|
add3YearsOutput | Строка | 4/7/2023 2:53:14 PM |
subtract9DaysOutput | Строка | 3/29/2020 2:53:14 PM |
add1HourOutput | Строка | 4/7/2020 3:53:14 PM |
В следующем примере показано, как задать время старта расписания автоматизации.
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)
Преобразовывает целое значение времени эпохи в значение даты и времени согласно ISO 8601.
Пространство имен: sys.
Параметры
Параметр | Обязательное поле | Type | Описание |
---|---|---|---|
epochTime | Да | INT | Время эпохи, которое следует преобразовать в строку даты и времени. |
Возвращаемое значение
Строка даты и времени в соответствии с ISO 8601.
Замечания
Для этой функции требуется интерфейс командной строки Bicep версии 0.5.X или более поздней.
Пример
В следующем примере показаны выходные значения функций времени эпохи.
param convertedEpoch int = dateTimeToEpoch(dateTimeAdd(utcNow(), 'P1Y'))
var convertedDatetime = dateTimeFromEpoch(convertedEpoch)
output epochValue int = convertedEpoch
output datetimeValue string = convertedDatetime
Результат выглядит так:
Имя. | Тип | значение |
---|---|---|
datetimeValue | Строка | 2023-05-02T15:16:13Z |
epochValue | Int | 1683040573 |
dateTimeToEpoch
dateTimeToEpoch(dateTime)
Преобразовывает строку даты и времени по стандарту ISO 8601 в целое значение времени эпохи.
Пространство имен: sys.
Параметры
Параметр | Обязательное поле | Type | Описание |
---|---|---|---|
dateTime | Да | строка | Строка даты и времени, которую следует преобразовать в значение времени эпохи. |
Возвращаемое значение
Целое число, представляющее количество секунд, прошедших с полуночи 1 января 1970 года.
Замечания
Для этой функции требуется интерфейс командной строки Bicep версии 0.5.X или более поздней.
Примеры
В следующем примере показаны выходные значения функций времени эпохи.
param convertedEpoch int = dateTimeToEpoch(dateTimeAdd(utcNow(), 'P1Y'))
var convertedDatetime = dateTimeFromEpoch(convertedEpoch)
output epochValue int = convertedEpoch
output datetimeValue string = convertedDatetime
Результат выглядит так:
Имя. | Тип | значение |
---|---|---|
datetimeValue | Строка | 2023-05-02T15:16:13Z |
epochValue | Int | 1683040573 |
В следующем примере значение времени эпохи используется, чтобы задать срок действия ключа в хранилище ключей.
@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)
Возвращает текущее значение (UTC) datetime в указанном формате. Если формат не указан, используется формат ISO 8601 (yyyyMMddTHHmmssZ
). Эта функция может использоваться только в значении параметра по умолчанию.
Пространство имен: sys.
Параметры
Параметр | Обязательное поле | Type | Описание |
---|---|---|---|
format | Нет | строка | Значение, закодированное в формате URI, которое необходимо преобразовать в строку. Используйте либо строки в стандартном формате, либо строки в настраиваемом формате. |
Замечания
Эту функцию можно использовать только в выражении для значения параметра по умолчанию. При использовании этой функции где-либо еще в файле Bicep возвращается ошибка. Функция не разрешена в других частях файла Bicep, поскольку она возвращает разные значения при каждом вызове. Развертывание одного и того же файла Bicep с одинаковыми параметрами, как правило, не будет возвращать одинаковые результаты.
При использовании параметра отката при ошибке до предыдущего успешного развертывания, а предыдущее развертывание включает параметр, использующий UtcNow, параметр не вычисляется повторно. Вместо этого значение параметра из предыдущего развертывания автоматически используется повторно в развертывании отката.
Будьте внимательны при повторном развертывании файла Bicep, который использует функцию utcNow для значения по умолчанию. При повторном развертывании без ввода значения параметра функция вычисляется повторно. Если нужно обновить существующий ресурс, а не создать новый, следует передать значение параметра из предыдущего развертывания.
Возвращаемое значение
Текущее значение datetime в формате UTC.
Примеры
В следующем примере показаны различные форматы для значения 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
Выходные данные из предыдущего примера различаются для каждого развертывания, но будут выглядеть примерно так:
Имя. | Тип | значение |
---|---|---|
utcOutput | строка | 20190305T175318Z |
utcShortOutput | строка | 05.03.2019 |
utcCustomOutput | строка | 5 |
В следующем примере показано, как использовать значение из функции при задании значения тега.
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
Следующие шаги
- Описание разделов в файле Bicep приведено в статье Общие сведения о структуре и синтаксисе файлов Bicep.