Saya dapat memformat Get-Date
cmdlet tidak ada masalah seperti ini:
$date = Get-Date -format "yyyyMMdd"
Tapi begitu saya punya tanggal dalam sebuah variabel, bagaimana saya memformatnya? Pernyataan di bawah ini
$dateStr = $date -format "yyyMMdd"
mengembalikan kesalahan ini:
"Anda harus memberikan ekspresi nilai di sisi kanan operator '-f'"
datetime
powershell
Ev.
sumber
sumber
$date -format "yyyMMdd"
jauh lebih intuitif untuk memformat objek tunggal daripada'{0:yyyyMMdd}' -f $date
.-f
operator (dengan sintaks seperti yang ditunjukkan pada jawaban yang diterima), tetapi tidak ada-format
operator. Pesan kesalahan mengeluh tentangormat
tidak menjadi operan RHS yang valid, tetapi perhatikan bahwa versi PowerShell baru-baru ini benar-benar memancarkan pesan kesalahan yang berbeda dan lebih bermanfaat:Unexpected token '-format' in expression or statement
Jawaban:
Sama seperti yang Anda lakukan di .NET :
Atau:
sumber
Pertanyaan dijawab, tetapi ada beberapa informasi yang hilang:
Variabel vs. Cmdlet
Anda memiliki nilai dalam
$Date
variabel dan-f
operator yang bekerja dalam formulir ini:'format string' -f values
. Jika Anda memanggilGet-Date -format "yyyyMMdd"
Anda memanggil cmdlet dengan beberapa parameter. Nilai "yyyyMMdd" adalah nilai untuk parameterFormat
(cobahelp Get-Date -param Format
).-f
operatorAda banyak format string. Lihatlah setidaknya pada part1 dan part2 . Dia menggunakan
string.Format('format string', values')
. Anggap saja sebagai'format-string' -f values
, karena-f
operator bekerja sangat mirip denganstring.Format
metode (walaupun ada beberapa perbedaan (untuk informasi lebih lanjut lihat pertanyaan di Stack Overflow: Bagaimana tepatnya RHS dari -f operator PowerShell's bekerja? ).sumber
Satu hal yang bisa Anda lakukan adalah:
sumber
Solusi yang sangat mudah - tetapi mungkin tidak terlalu efisien - adalah dengan menggunakan fungsi anggota
GetDateTimeFormats()
,Ini menghasilkan string-array besar gaya pemformatan untuk nilai-tanggal. Anda kemudian dapat memilih salah satu elemen array melalui
[]
-operator, misalnya,sumber
Cara sederhana dan menyenangkan adalah:
$time = (Get-Date).ToString("yyyy:MM:dd")
sumber
Lakukan ini jika Anda benar-benar perlu menggunakan
-Format
opsi:Namun
mungkin lebih efisien .. :)
sumber
$dateStr = (Get-Date $date -Format "yyyMMdd")
menghasilkan tipe objek yang berbeda dari objek datetime. Cobalah bermain-main dengan ini.$dateStr = [datetime](Get-Date $date -Format "yyyMMdd")
Anda akan segera melihat perbedaannya.Jika Anda sampai di sini untuk menggunakan ini dalam
cmd.exe
(dalam file batch):sumber
Saya membutuhkan waktu dan sedikit variasi dalam format. Ini berfungsi baik untuk tujuan saya:
Menurut @ mklement0 dalam komentar, ini akan menghasilkan hasil yang sama:
sumber
Jawaban yang sangat informatif dari @stej , tetapi ini adalah jawaban singkat: Di antara opsi lain , Anda memiliki 3 opsi sederhana untuk memformat [System.DateTime] yang disimpan dalam variabel:
Lewati variabel ke cmdlet Get-Date :
Get-Date -Format "HH:mm" $date
Gunakan metode toString () :
$date.ToString("HH:mm")
Gunakan pemformatan Komposit :
"{0:HH:mm}" -f $date
sumber
Bagi siapa pun yang mencoba memformat tanggal saat ini untuk digunakan dalam tajuk HTTP, gunakan format "r" (kependekan dari RFC1123) tetapi waspadalah dengan peringatan ...
Yaitu Jangan lupa untuk menggunakan "ToUniversalTime ()"
sumber