Gibi basit bir şeye ihtiyacım var date
, ama geçerli tarih, saat, dakika ve saniye yerine 1970'den bu yana saniyeler içinde.
date
bu 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.
date
bu 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 UTC
için %s seconds since the epoch, 1970-01-01 00:00:00 UTC
orada onu cevapsız çünkü.
date
yerleşik değildir bash
, bu nedenle sürümünüzün sisteminizle bash
birlikte gelen date
uygulama 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 date
oldukç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
date
kullanıyorum ya da kullanıyorum çünkü zsh
bu 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 printf
yeni bir değiştirici vardır %(dateformat)T
, argüman kullanıldığında -1
verdiği formatı ile geçerli tarih çıkışı dateformat
tarafından ele, strftime(3)
( man 3 strftime
biç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 -1
yine de argümanı vermek daha akıllıca olabilir ).
Eğer kullanırsanız -2
yerine argüman olarak -1
Bash 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
-2
uzun 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, -2
bir 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 EPOCHREALTIME
saniye kesirleri de vardır.
$ echo $EPOCHREALTIME
1547624774.371215
EPOCHREALTIME
ondalık noktası kaldırılarak mikro saniyeye (μs) dönüştürülebilir. Yalnızca tamsayıları işleyebilen bash
yerleş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 date
herhangi 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
date
emri için, öneren çözümler date -d
GNU 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ı .
%N
gnu 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.