Fungsi tanggal untuk Bicep

Artikel ini menjelaskan fungsi Bicep untuk bekerja dengan tanggal.

dateTimeAdd

dateTimeAdd(base, duration, [format])

Menambahkan durasi waktu ke nilai dasar. Format ISO 8601 diharapkan.

Namespace: sys.

Parameter

Parameter Wajib Tipe Deskripsi
dasar Ya string Nilai tanggalwaktu mulai untuk penambahan. Gunakan format tanda waktu ISO 8601.
durasi Ya string Nilai waktu untuk ditambahkan ke basis. Hal ini bisa menjadi nilai negatif. Gunakan format durasi ISO 8601.
format No string Format keluaran untuk hasil tanggal waktu. Jika tidak disediakan, format nilai dasar digunakan. Gunakan untai (karakter) format standar atau untai (karakter) format kustom.

Nilai hasil

Nilai tanggalwaktu yang hasil dari menambahkan nilai durasi ke nilai dasar.

Keterangan

Fungsi dateTimeAdd ini tidak mempertimbangkan tahun kampung, dan P1Y harus ditafsirkan sebagai P365D, sementara P1M harus ditafsirkan sebagai P30D. File Bicep berikut menunjukkan beberapa contoh:

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

Dalam contoh sebelumnya, mengingat 2023 sebagai tahun non-kampung, hasil penambahan satu tahun ke hari awal tahun adalah 2024-01-01T00:00:00Z. Sebaliknya, menambahkan satu tahun ke hari mulai 2024, tahun kabut, menghasilkan 2024-12-31T00:00:00Z, bukan 2025-01-01T00:00:00Z, mengingat bahwa tahun kabut terdiri dari 366 hari alih-alih 365 hari. Selain itu, perbedaan antara tahun lompatan dan non-lompatan menjadi jelas ketika menambahkan satu bulan ke hari pertama Bulan Februari, yang mengarah ke berbagai hasil hari dalam sebulan.

Contoh

Contoh berikut ini menampilkan berbagai cara untuk menambahkan nilai waktu.

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

Ketika template sebelumnya disebarkan dengan waktu dasar 2020-04-07 14:53:14Z, keluarannya adalah:

Nama Jenis Nilai
add3YearsOutput String 4/7/2023 14:53:14 WIB
subtract9DaysOutput String 3/29/2020 14:53:14 WIB
add1HourOutput String 4/7/2020 15:53:14 WIB

Contoh berikutnya menampilkan cara mengatur waktu mulai untuk jadwal 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@2022-08-08' = {
  name: concat(omsAutomationAccountName, '/', scheduleName)
  properties: {
    description: 'Demo Scheduler'
    startTime: startTime
    interval: 1
    frequency: 'Hour'
  }
}

dateTimeFromEpoch

dateTimeFromEpoch(epochTime)

Mengonversi nilai bilangan bulat waktu epoch menjadi tanggalwaktu ISO 8601.

Namespace: sys.

Parameter

Parameter Wajib Tipe Deskripsi
epochTime Ya int Waktu epoch untuk mengonversi ke string tanggalwaktu.

Nilai hasil

String tanggalwaktu ISO 8601.

Keterangan

Fungsi ini memerlukan Bicep CLI versi 0.5.X atau yang lebih tinggi.

Contoh

Contoh berikut menunjukkan nilai output untuk fungsi waktu epoch.

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

var convertedDatetime = dateTimeFromEpoch(convertedEpoch)

output epochValue int = convertedEpoch
output datetimeValue string = convertedDatetime

Outputnya adalah:

Nama Jenis Nilai
datetimeValue String 2023-05-02T15:16:13Z
epochValue Int 1683040573

dateTimeToEpoch

dateTimeToEpoch(dateTime)

Mengonversi string tanggalwaktu ISO 8601 menjadi nilai bilangan bulat waktu epoch.

Namespace: sys.

Parameter

Parameter Wajib Tipe Deskripsi
tanggalWaktu Ya string String tanggalwaktu untuk dikonversi ke waktu epoch.

Nilai hasil

Bilangan bulat yang mewakili jumlah detik dari tengah malam pada 1 Januari 1970.

Keterangan

Fungsi ini memerlukan Bicep CLI versi 0.5.X atau yang lebih tinggi.

Contoh

Contoh berikut menunjukkan nilai output untuk fungsi waktu epoch.

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

var convertedDatetime = dateTimeFromEpoch(convertedEpoch)

output epochValue int = convertedEpoch
output datetimeValue string = convertedDatetime

Outputnya adalah:

Nama Jenis Nilai
datetimeValue String 2023-05-02T15:16:13Z
epochValue Int 1683040573

Contoh berikutnya menggunakan nilai waktu epoch untuk mengatur kedaluwarsa untuk kunci dalam brankas kunci.

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

Mengembalikan nilai tanggalwaktu (UTC) saat ini dalam format yang ditentukan. Jika tidak ada format yang disediakan, format ISO 8601 (yyyyMMddTHHmmssZ) digunakan. Fungsi ini hanya dapat digunakan dalam nilai default untuk parameter.

Namespace: sys.

Parameter

Parameter Wajib Tipe Deskripsi
format No string Nilai yang dikodekan URI untuk dikonversi menjadi string. Gunakan untai (karakter) format standar atau untai (karakter) format kustom.

Keterangan

Anda hanya bisa menggunakan fungsi ini dalam ekspresi untuk nilai default parameter. Menggunakan fungsi ini di tempat lain dalam file Bicep mengembalikan kesalahan. Fungsi ini tidak diizinkan di bagian lain file Bicep karena mengembalikan nilai yang berbeda setiap kali disebut. Menyebarkan file Bicep yang sama dengan parameter yang sama tidak akan menghasilkan hasil yang sama secara andal.

Jika Anda menggunakan opsi untuk putar kembali kesalahan yang berhasil disebar sebelumnya, dan menyertakan parameter yang menggunakan utcNow, parameter tidak dievaluasi ulang. Sebaliknya, nilai parameter dari penyebaran sebelumnya secara otomatis digunakan kembali dalam penyebaran putar kembali.

Hati-hati menyebar ulang file Bicep yang bergantung pada fungsi utcNow untuk nilai default. Ketika Anda menyebar ulang dan tidak memberikan nilai untuk parameter, fungsi tersebut dievaluasi kembali. Jika Anda ingin memperbarui sumber daya yang ada daripada membuat yang baru, berikan nilai parameter dari penyebaran sebelumnya.

Nilai hasil

Nilai tanggalwaktu UTC saat ini.

Contoh

Contoh berikut ini menampilkan format berbeda untuk nilai tanggalwaktu.

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

Keluaran dari contoh sebelumnya bervariasi untuk setiap penyebaran tetapi akan mirip dengan:

Nama Jenis Nilai
utcOutput string 20190305T175318Z
utcShortOutput string 03/05/2019
utcCustomOutput string 3 5

Contoh berikutnya menampilkan cara menggunakan nilai dari fungsi saat mengatur nilai tag.

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

Langkah berikutnya