Perintah 'date + FORMAT' - Apa yang disebut% a,% A,% b, dll.?

10

The dateperintah output tanggal dan waktu seperti ini: Fri Apr 12 15:04:03 UTC 2013.

Untuk memiliki tanggal-waktu keluaran dalam format khusus yang dapat kita gunakan date +FORMAT, misalnya, seperti ini: date "+%Y-%m-%dT%H:%M:%S%:z"yang memberikan sesuatu seperti 2013-04-12T15:04:37+00:00.

Tapi saya ingin tahu apa %Y, %m, %d, %H, %M, %S, dll secara kolektif disebut (yaitu terminologi). Juga, apa Tnamanya, karena berbeda dari yang lain?

ini aku
sumber
3
“FORMAT mengontrol output. Ditafsirkan urutan yang ...”- man dateDan‘T’hanya literal‘T’.
manatwork
@manatwork Di halaman manual, saya pikir urutannya merujuk pada keduanya %Ydan artinya masing-masing.
its_me
Kiat:date +"You will die in the year %Y"
Izkata
@Izkata Tidak masuk akal (?)
its_me
1
@TheoneManis Hanya contoh yang Ttidak istimewa. Juga, saya mengalami hari yang aneh di tempat kerja ketika saya mengetik itu (mendengarkan percakapan rekan kerja).
Izkata

Jawaban:

7

Istilah yang digunakan dalam spesifikasi POSIX dari dateperintah adalah "spesifikasi konversi".

String format untuk dateperintah ini berdasarkan pada string format untuk printffungsi C ; standar C juga merujuk pada hal-hal seperti %d"spesifikasi konversi".

Ttidak diawali dengan %hanya karakter: "Semua karakter lain harus disalin ke output tanpa perubahan."

Menurut bagian riwayat perubahan pada deskripsi POSIX dari date:

DESCRIPTION diperbarui untuk merujuk pada spesifikasi konversi, alih-alih deskriptor lapangan untuk konsistensi dengan kategori LC_TIME.

Jadi ternyata versi sebelumnya dari spesifikasi menggunakan frasa "deskriptor bidang", tetapi "spesifikasi konversi" adalah istilah resmi saat ini.

Tentu saja itu tidak berarti Anda harus merujuk mereka seperti itu.

Keith Thompson
sumber
Apakah " conversion sequences" atau " format sequences" persyaratan yang sesuai juga? Saya mempertimbangkan sequenceslebih specifications'penyebab itu sebenarnya disebutkan dalam halaman manual untuk date.
its_me
2
@TheoneManis: Salah satu dari ketiganya tampaknya cukup jelas tentang artinya.
Keith Thompson
4

Saya akan berpikir "melarikan diri urutan" atau (dalam hal ini) "karakter khusus untuk urutan melarikan diri persen" akan menjadi cara khas merujuk mereka. Urutan backslash-dan persen-lolos banyak digunakan dalam C (misalnya printf), jadi mereka juga memfilter ke beberapa perintah Unix (seperti menentukan prompt untuk shell).

"Urutan melarikan diri" adalah "% Y", "% m", "% d" dan seterusnya; dan "karakter khusus" adalah "Y", "m", "d" dan seterusnya. "%" akan menjadi "karakter pelarian" (karakter yang memberikan karakter berikut makna yang tidak biasa / istimewa).

Baard Kopperud
sumber
3

Dokumen ini dari Pusat Informasi IBM jelas menyatakan bahwa huruf di %Y, %m, %d, %H, %M, %S, dll disebut " Lapangan Deskriptor ".

Anda harus mendahului setiap deskriptor bidang dengan tanda % (persen). Sistem menggantikan deskriptor bidang dengan nilai yang ditentukan. [...] datePerintah menyalin karakter lain ke output tanpa perubahan.

Itu menjawab dua pertanyaan saya (sekitar% n & T). Dan saya percaya ini otoritatif yang bisa didapat.

ini aku
sumber
1
IBM tidak menciptakan dateperintah; apa yang membuat dokumentasi mereka berwibawa? Perilaku perintah saat ini didefinisikan oleh POSIX, yang tidak menggunakan istilah itu. Riwayat perubahan di bagian bawah deskripsi POSIX mengatakan "DESCRIPTION diperbarui untuk merujuk pada spesifikasi konversi, alih-alih deskriptor lapangan untuk konsistensi dengan kategori LC_TIME.", Yang menyiratkan bahwa "spesifikasi konversi", bukan "field diescriptor" adalah benar istilah saat ini. Lihat juga jawaban saya yang diperbarui.
Keith Thompson
2

Seperti yang dinyatakan orang lain, Tini adalah huruf literal T. Tetapi untuk lebih spesifik, contoh Anda date "+%Y-%m-%dT%H:%M:%S%:z"tampaknya berupa format string yang sesuai dengan spesifikasi ISO-8601 untuk tanggal dan waktu. Jadi di sini Tadalah pembatas yang memisahkan tanggal dari waktu.

Jeff Daly
sumber