Dalam Bash dan sebagian besar shell Bourne-turunan modern, $()lebih disukai daripada backticks untuk keterbacaan dan alasan lainnya . echo $(( $(date ...) / 86400 ))
Dijeda sampai pemberitahuan lebih lanjut.
Belum punya 2000 ... bisakah seseorang mengedit dan memperbaiki judul :-)
Ring Ø
Jawaban:
20
ring0 mengalahkan saya beberapa detik, tetapi perintah lengkapnya adalah:
@netvope Setelah lompatan kedua, waktu unix diatur ulang oleh satu lagi. Jadi setiap hari menambahkan persis 86400 detik unix. Namun, waktu unix 915148800 dapat berlaku untuk UTC 1998-12-31T23: 59: 60 dan 1999-01-01T00: 00: 00 en.wikipedia.org/wiki/Unix_time#Leap_seconds
Debilski
9
The dateperintah dapat memberikan jumlah detik sejak 1970-01-01 00:00:00 UTC.
date +"%s"
Anda dapat membagi hasilnya dengan 3600*24mendapatkan jumlah hari (UTC).
Mengapa ini diturunkan? Ini jawaban terbaik dan terpendek dan paling sederhana
Tom Corelis
1
Saya perlu menyelesaikan ini juga, tetapi saya ingin mendapatkan nilai yang sama untuk hari # terlepas dari waktu hari. Dengan pendekatan seperti yang ditunjukkan di sini, nilainya akan berubah pada tengah malam UTC dan bukan tengah malam waktu setempat. Ini sepertinya kurang dari masalah di UE atau Pantai Timur AS, yang cukup dekat dengan UTC sehingga nilai hari tidak akan berubah di tengah hari kerja biasa, tetapi di, misalnya, California, perubahan hari akan terjadi pukul 4 sore PST, yang mungkin tidak nyaman. Saya membayangkan orang Australia akan sangat terganggu karena perubahan nilai hari di pagi hari.
Jika kita ingin memperbaikinya, kita perlu menambahkan offset dari UTC sebelum membaginya dengan detik / hari. Untungnya, perintah tanggal Linux menyertakan urutan format % z yang melaporkan offset dari UTC. Sedangkan format standar (hasil ini adalah untuk waktu Denver, MDT):
$ date +%z
-0600
. . . tidak dapat langsung digunakan dalam perhitungan, pengubah yang tepat akan menghasilkan apa yang kita inginkan:
$ date +%-:::z
-6
Masukkan itu bersama dengan konversi detik / jam / hari yang biasa, dan saya yakin yang berikut ini akan menghasilkan hari-hari sejak 1/1/1970, dengan 1/1/1970 itu sendiri menjadi hari nol, dan nilainya bertambah pada tengah malam waktu setempat:
Perhitungan sederhana ini tidak akan berfungsi untuk zona waktu yang tidak diimbangi dari UTC oleh seluruh jam (misalnya, India, TZ = Asia / Kolkata), karena date +%-:::zkesalahan "+5: 30" yang dihasilkan oleh akan menghasilkan kesalahan "karakter tidak valid dalam ekspresi" bila digunakan dalam pernyataan di atas.
$()
lebih disukai daripada backticks untuk keterbacaan dan alasan lainnya .echo $(( $(date ...) / 86400 ))
Jawaban:
ring0 mengalahkan saya beberapa detik, tetapi perintah lengkapnya adalah:
Ini berlaku waktu UTC. Hasil:
Pemeriksaan cepat dengan WolframAlpha menunjukkan bahwa ini adalah nilai yang benar.
sumber
The
date
perintah dapat memberikan jumlah detik sejak1970-01-01 00:00:00 UTC
.Anda dapat membagi hasilnya dengan
3600*24
mendapatkan jumlah hari (UTC).Misalnya di Bash
untuk menampilkan jumlah hari.
sumber
Saya pikir ini adalah metode paling sederhana:
sumber
Saya perlu menyelesaikan ini juga, tetapi saya ingin mendapatkan nilai yang sama untuk hari # terlepas dari waktu hari. Dengan pendekatan seperti yang ditunjukkan di sini, nilainya akan berubah pada tengah malam UTC dan bukan tengah malam waktu setempat. Ini sepertinya kurang dari masalah di UE atau Pantai Timur AS, yang cukup dekat dengan UTC sehingga nilai hari tidak akan berubah di tengah hari kerja biasa, tetapi di, misalnya, California, perubahan hari akan terjadi pukul 4 sore PST, yang mungkin tidak nyaman. Saya membayangkan orang Australia akan sangat terganggu karena perubahan nilai hari di pagi hari.
Jika kita ingin memperbaikinya, kita perlu menambahkan offset dari UTC sebelum membaginya dengan detik / hari. Untungnya, perintah tanggal Linux menyertakan urutan format % z yang melaporkan offset dari UTC. Sedangkan format standar (hasil ini adalah untuk waktu Denver, MDT):
. . . tidak dapat langsung digunakan dalam perhitungan, pengubah yang tepat akan menghasilkan apa yang kita inginkan:
Masukkan itu bersama dengan konversi detik / jam / hari yang biasa, dan saya yakin yang berikut ini akan menghasilkan hari-hari sejak 1/1/1970, dengan 1/1/1970 itu sendiri menjadi hari nol, dan nilainya bertambah pada tengah malam waktu setempat:
Perhitungan sederhana ini tidak akan berfungsi untuk zona waktu yang tidak diimbangi dari UTC oleh seluruh jam (misalnya, India, TZ = Asia / Kolkata), karena
date +%-:::z
kesalahan "+5: 30" yang dihasilkan oleh akan menghasilkan kesalahan "karakter tidak valid dalam ekspresi" bila digunakan dalam pernyataan di atas.sumber