Gibi basit bir şeye ihtiyacım var date, ama geçerli tarih, saat, dakika ve saniye yerine 1970'den bu yana saniyeler içinde.
datebu seçeneği sunmuyor gibi görünüyor. kolay bir yolu var mı?
Gibi basit bir şeye ihtiyacım var date, ama geçerli tarih, saat, dakika ve saniye yerine 1970'den bu yana saniyeler içinde.
datebu seçeneği sunmuyor gibi görünüyor. kolay bir yolu var mı?
Yanıtlar:
Bu çalışmalı:
date +%s
%s seconds since 1970-01-01 00:00:00 UTCiçin %s seconds since the epoch, 1970-01-01 00:00:00 UTCorada onu cevapsız çünkü.
dateyerleşik değildir bash, bu nedenle sürümünüzün sisteminizle bashbirlikte gelen dateuygulama ile hiçbir ilgisi yoktur .
date +%s.%N
date +%s%3N
Sadece eklemek için.
Herhangi bir tarih için (örneğin 1 Ekim 1973) dönemden bu yana geçen saniye sayısını öğrenin (1 Ocak 1970)
date -d "Oct 21 1973" +%s
Saniye sayısını tarihe dönüştürün
date --date @120024000
Komut dateoldukça çok yönlü. Tarihle yapabileceğiniz başka bir harika şey (utanmadan kopyalandı date --help). ABD'nin batı kıyısındaki önümüzdeki Cuma 09:00 için yerel saati göster
date --date='TZ="America/Los_Angeles" 09:00 next Fri'
Daha da iyisi, man sayfasını okumak için biraz zaman ayırın http://man7.org/linux/man-pages/man1/date.1.html
datekullanıyorum ya da kullanıyorum çünkü zshbu benim için çalışmıyor. Koşu $ date -d "Oct 21 1973" +%sçıkışlarıusage: date [-jnRu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ... [-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]
Şimdiye kadar, tüm cevaplar harici programı kullanıyor date.
Bash 4.2 beri printfyeni bir değiştirici vardır %(dateformat)T, argüman kullanıldığında -1verdiği formatı ile geçerli tarih çıkışı dateformattarafından ele, strftime(3)( man 3 strftimebiçimleri hakkında bilgiler için).
Saf bir Bash çözümü için:
printf '%(%s)T\n' -1
veya sonucu bir değişkende depolamanız gerekiyorsa var:
printf -v var '%(%s)T' -1
Harici program ve alt kabuk yok!
Bash 4.3'ten bu yana, aşağıdakileri belirtmek bile mümkün değildir -1:
printf -v var '%(%s)T'
(ancak -1yine de argümanı vermek daha akıllıca olabilir ).
Eğer kullanırsanız -2yerine argüman olarak -1Bash kabuk yerine geçerli tarihi başlandı zaman kullanacaktır. Bu, geçen süreleri hesaplamak için kullanılabilir
$ printf -v beg '%(%s)T\n' -2
$ printf -v now '%(%s)T\n' -1
$ echo beg=$beg now=$now elapsed=$((now-beg))
beg=1583949610 now=1583953032 elapsed=3422
-2uzun süre çalışan bir işiniz olması durumunda (yedeklerinizi kontrol etmek için bir komut dosyası düşünün) ve sonunda "Yedekleme $ $ 'dan hemen şimdi tamamlandı" şeklinde bir posta göndermeniz durumunda kullanmak istersiniz - bu, -2bir başında değişken.
Çoğu Awk uygulamasıyla:
awk 'BEGIN {srand(); print srand()}'
srand() uygulamalarının tipik olarak geçerli tarih / saat ile tohumlandığı görülmektedir. Daha srand()önce tohum olarak kullanılan değeri döndürmek için ikinci çağrı .
5.0'dan beri bash( 7 Ocak 2019'da piyasaya sürüldü ) yerleşik değişkeni kullanabilirsiniz EPOCHSECONDS.
$ echo $EPOCHSECONDS
1547624774
Ayrıca EPOCHREALTIMEsaniye kesirleri de vardır.
$ echo $EPOCHREALTIME
1547624774.371215
EPOCHREALTIMEondalık noktası kaldırılarak mikro saniyeye (μs) dönüştürülebilir. Yalnızca tamsayıları işleyebilen bashyerleşik aritmetiği kullanırken bu ilgi çekici (( expression ))olabilir.
$ echo ${EPOCHREALTIME/./}
1547624774371215
Yukarıdaki tüm örneklerde daha iyi okunabilirlik için yazdırılan süre değerleri eşittir. Gerçekte, her komutun yürütülmesi biraz zaman aldığı için zaman değerleri farklı olacaktır.
date +%s%3N) için kullanabilirsinizecho $(( ${EPOCHREALTIME/./} / 1000 ))
Bu @pellucide'ın yaptıklarının bir uzantısıdır, ancak Mac'ler için:
Herhangi bir tarih için (1 Ocak 1970) dönemden bu yana geçen saniye sayısını belirlemek için (örn. 21 Ekim 1973)
$ date -j -f "%b %d %Y %T" "Oct 21 1973 00:00:00" "+%s"
120034800
Tamlık için, zaman bölümünü forma eklediğimi lütfen unutmayın. Bunun nedeni, verdiğiniz dateherhangi bir tarih bölümünü alır ve geçerli saati verilen değere ekler . Örneğin, yukarıdaki komutu 16: 19'da, '00: 00: 00' bölümü olmadan yürütürseniz, zamanı otomatik olarak ekler. Öyle ki "21 Ekim 1973", "21 Ekim 1973 16:19:00" olarak ayrıştırılacaktır. İstediğiniz bu olmayabilir.
Zaman damganızı bir tarihe dönüştürmek için:
$ date -j -r 120034800
Sun Oct 21 00:00:00 PDT 1973
Apple'ın tarih uygulaması için kılavuz sayfası: https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/date.1.html
dateemri için, öneren çözümler date -dGNU içindir date. MacOS'taki BSD tarihi FreeBSD'den gelir ve NetBSD ve OpenBSD ile bir dizi seçeneği paylaşır. Ve bu bash'tan tamamen ayrı .
%Ngnu tarihi fraksiyonel saniye belirtilen opsiyon MacOS tarihinden itibaren eksik. 10.14'te formatların hiçbiri kılavuz sayfasında değildir; İçinde bulundukları strftime(3)Xcode yüklü olmayan, ve bunu bile adam komutuyla görmeyebilirsiniz eğer olmaz adam sayfasında.