1/1/1970 tarihinden bu yana geçen gün sayısını nasıl hesaplayabilirsiniz? Bu, OpenLDAP üzerindeki shadowLastChange özniteliğini güncellemek içindir .
Bunu linux date komutunu kullanarak yapmanın bir yolu var mı ?
1/1/1970 tarihinden bu yana geçen gün sayısını nasıl hesaplayabilirsiniz? Bu, OpenLDAP üzerindeki shadowLastChange özniteliğini güncellemek içindir .
Bunu linux date komutunu kullanarak yapmanın bir yolu var mı ?
Yanıtlar:
ring0 beni birkaç saniye dövdü, ama tam komut:
echo $(($(date --utc --date "$1" +%s)/86400))
Bu UTC saatine göre değişir. Sonuç:
root@hostname:~# echo $((`date --utc --date "$1" +%s`/86400))
14984
Bir Wolfram Alpha ile hızlı check bu doğru değeri olduğunu gösterir.
Bence bu en basit yöntem:
expr $(date +%s) / 86400
Bunu da çözmem gerekiyordu, ancak günün saatine bakılmaksızın # gün için aynı değeri elde etmek istedim. Burada gösterilenler gibi yaklaşımlarda değer, gece yarısı yerel saati yerine UTC gece yarısı değişecektir. Bu muhtemelen AB veya ABD Doğu Kıyısı'nda UTC'ye yeterince yakın olan ve gün değerinin tipik iş gününün ortasında değişmeyeceği, ancak örneğin California'da gün değişikliği gibi bir sorun gibi görünmüyor. uygunsuz olabilir 4 PST de meydana gelecektir. Avustralyalıların özellikle sabahın sonlarında gün değerinin değişmesinden rahatsız olacaklarını düşünüyorum.
Bunu düzeltmek istiyorsak, saniyeye / güne bölmeden önce UTC'den ofseti eklememiz gerekir. Neyse ki, Linux tarih komutu UTC'den ofseti raporlayan bir % z biçim dizisi içerir. Standart format (bu sonuç Denver zamanı, MDT için) iken:
$ date +%z
-0600
. . . bir hesaplamada doğrudan kullanılamazsa, doğru değiştiriciler istediğimizi verir:
$ date +%-:::z
-6
Bunu her zamanki saniye / saat / gün dönüşümleri ile birlikte koyun ve aşağıdakilerin 1/1/1970 tarihinden bu yana günlerin çıktısını alması gerektiğine inanıyorum, 1/1/1970'in kendisi sıfır günü ve yerel gece yarısı saatindeki değer artar:
echo $(( ( $(date +"%s + ( %-:::z * 3600)") ) / 86400 ))
Bu basit hesaplama, UTC'den tam saatlere kadar dengelenmeyen saat dilimleri için (örneğin, Hindistan, TZ = Asya / Kalküta) date +%-:::z
çalışmaz , çünkü tarafından üretilen "+5: 30" "ifadede geçersiz karakter" hatası üretir Yukarıdaki ifadede kullanıldığında.
$()
backticks'e tercih edilir .echo $(( $(date ...) / 86400 ))