Soru Güncel Unix süresini bash olarak milisaniye cinsinden nasıl alabilirim?


Şu anki Unix zamanını milisaniye cinsinden nasıl alabilirim (yani, 1 Ocak 1970’ten beri Unix döneminden beri milisaniye sayısı)?


197
2018-06-14 16:04


Menşei




Cevaplar:


Bu:

date +%s 

sayısını döndürecek saniye çağlardan beri.

Bu:

date +%s%N

saniye ve geçerli nanosaniye döndürür.

Yani:

date +%s%N | cut -b1-13

Çocuğunuz, geçerli saniye olan nanosaniyelerin sol üçünden itibaren milisaniye sayısını verecektir.


ve MikeyB - echo $(($(date +%s%N)/1000000)) (1000'e bölerek sadece mikrosaniye getirir)


234
2018-06-14 16:10



Kesim kaç ms ekler :-) merak ediyorum - Kyle Brandt♦
Ya da tümüyle kabuk içinde yapmak istiyorsanız, ek bir işlemin pahalı yükünden kaçınmak (aslında,% + s + N değerindeki basamak sayısı değiştiğinde sorunu önlemekteyiz): echo $(($(date +%s%N)/1000)) - MikeyB
Bu konunun ilkesi ... sihirli sayılardan kaçının ve aslında neyi kodladığınızı anlamına gelmek. - MikeyB
Bence, Linux'un değil, Unix'i sorduğunu ve şu anki en iyi cevabın (tarih +% s% N) AIX sistemimde çalışmadığını belirtti. - Pete
@Pete +1 OS X ve FreeBSD için aynı - ocodo


Sadece kullanabilirsiniz %3N nanosaniye değerini en önemli 3 haneye (o zaman milisaniye cinsinden) kırpmak için:

$ date +%s%3N
1397392146866

Bu, örn. benim kubuntu 12.04 üzerinde.

Ama farkında ol, %N Hedef sisteminize bağlı olarak uygulanamayabilir. Örneğin. gömülü bir sistem üzerinde test edildi (HF olmayan çapraz takım zinciri kullanılarak derlenen temel kökler) %N:

$ date +%s%3N
1397392146%3N

(Ve aynı zamanda benim (köklü olmayan) Android tablet yok %N).


80
2018-04-13 12:34



@warren: Düzenledim ve değiştirdiğini gördüm. 1397392146%3N için 1397392146%Nama çıktı 1397392146%3N Android tabletimin meşrubat konsolunda gerçekten gördüğüm şey buydu. Düzenlemenizi açıklar mısınız? - Joe
warren'in tarihe ait yorumu "3'ten 6'ya değiştirildi, çünkü 3 sizi yalnızca mikrosaniye götürüyor". Düzenlemesi tamamen sahte görünüyor; geri almalısın. - bukzor
Bu, özellikle GNU coreutils'in bir özelliğidir. Nihayetinde, bu burada gnulib'de uygulanmaktadır: github.com/gagern/gnulib/blob/.... - telotortium
Muhtemelen orada bir nokta mantıklı. date +%s.%3N baskılar 1510718281.134. - darksky


date +%N OS X'de çalışmıyor, ancak birini kullanabilirsiniz

  • yakut: ruby -e 'puts Time.now.to_f'
  • piton: python -c 'import time; print time.time()'
  • node.js: node -e 'console.log(Date.now())'
  • PHP: php -r 'echo microtime(TRUE);'
  • internets: wget -qO- http://www.timeapi.org/utc/now?\\s.\\N
  • veya en yakın saniyeye yuvarlanan milisaniyeler için date +%s000

51
2017-09-02 11:16



Tamamlamak için... node -e 'console.log(Date.now())' - slf
PHP'yi kullanma: php -r 'echo microtime(TRUE);' - TachyonVortex
Elbette, bu tercümanların ısınmasını beklemek zorundasın. Bu da çalışır: wget -qO- http://www.timeapi.org/utc/now?\\s.\\N - Camilo Martin
Ya da milisaniye aslında gerek yok ama sadece doğru format: date +%s000 - Lenar Hoyt
apple.stackexchange.com/questions/135742/... Bunu, OSX’te Brew’i kullanarak yapmak için talimatlar var coreutils - sameers


Sadece bunu dışarı atıyorum, ama sanırım bölüme sahip doğru formül şöyle olurdu:

echo $(($(date +%s%N)/1000000))

8
2017-09-07 21:22





Benim çözümüm en iyisi değil ama benim için çalıştı.

date +%s000

Sadece 2012-05-05 gibi bir tarihi milisaniyeye dönüştürmem gerekiyor.


6
2018-05-09 20:11



İnanılmaz hack, lol :) - k06a
İş arkadaşlarımdan biri olmalısınız. - Nakilon


Dış programları çalıştırmayı öneren insanlar için millisaniye ... bu hızda, bunu da yapabilirsiniz:

wget -qO- http://www.timeapi.org/utc/now?\\s.\\N

Noktası: Buradan herhangi bir cevap almadan önce, tüm programların bir saniyenin altında çalışmayacağını unutmayın. Ölçün!


6
2018-06-23 13:17



Yerel sistemi zaman istemiyorsun. Bu soruya kastettiğimi tahmin ediyorum. Ayrıca bir ağ bağlantısına da bağlısınız. - orkoden
@orkoden Soru, "1 Ocak 1970’ten bu yana Unix döneminden beri milisaniye sayısı" sorusunu açıkça sormaktadır. Ayrıca, zaman kazanmak için sadece Ruby ya da Python (ya da wget) 'i nasıl tetiklememeliysen daha çok işaret ediyorum - ya bu hızlı bir kanal ya da milisaniye ile gerçekleşmez. - Camilo Martin
Evet, kötü çözümlerin kusurlarını vurgulamak için daha kötü bir çözüm sunduğunu anladım. Birkaç çözüm denedim ve zamanı ölçtüm. lpaste.net/119499 Sonuçlar ilginç. Çok hızlı bir i7 makinesinde bile date çalıştırmak için 3 ms sürer. - orkoden
@orkoden Güzel test! Hangi işletim sistemi? Bu işlem yumurtlama yükü ile ilgili olabilir. - Camilo Martin
@Nakilon ve bu yüzden bir şey üretim için olanlar gibi kıvrılabilir kolaylıklara güvenmemeliyiz. - Camilo Martin


Bu çözüm MacOS'ta çalışır.

Bir bash betiği kullanmayı düşünürseniz ve mevcut bir python'unuz varsa, bu kodu kullanabilirsiniz:

#!/bin/bash

python -c 'from time import time; print int(round(time() * 1000))'

3
2018-02-05 14:26



neden aşağı oy? - Frank Thonig
Özellikle haklı görünmüyor. Aşağı okdaki ipucu "Bu cevap yararlı değil" diyor, ancak IMO yararlıdır. Belki de bunun yerine bir Python betiği yapmanı istediler. Bu daha basit ve aynı zamanda bir bash komutu olarak iyi çalışıyor. - Andrew Schulman
Downvotes hakkında çok fazla endişelenme (benim değildi) ... özellikle anonim iseler (hangisinin yanlış olduğunu öğrenemediğinden, değil mi?). Sadece işime yarayacaksın ... işte başka bir +1 ... tahmin et ne: şimdi de "oylama" yapmana izin var, değil mi? - Pierre.Vriens
Azaltmanın sistemdeki bir sorundan kaynaklandığı anlaşılıyor. O zamandan beri sistem tarafından kaldırıldı. - Michael Hampton♦


Komut dosyanızın çalıştırdığı süreyi görüntülemenin bir yolunu arıyorsanız, aşağıdaki (tam olarak doğru olmayan) bir sonuç sağlar:

Senaryonuzun başlangıcına yakın olarak, aşağıdakileri girin

basetime=$(date +%s%N)

Bu size 1361802943996000000 gibi bir şeyin başlangıç ​​değerini verecektir.

Komut dosyanızın sonunda aşağıdakileri kullanın

echo "runtime: $(echo "scale=3;($(date +%s%N) - ${basetime})/(1*10^09)" | bc) seconds"

gibi bir şey gösterecek

runtime: 12.383 seconds

Notlar:

(1 * 10 ^ 09) isterseniz 1000000000 ile değiştirilebilir

"scale=3" zorlayan oldukça nadir bir ayardır bc istediğini yapmak için. Çok daha fazlası var!

Bunu sadece Win7 / MinGW üzerinde test ettim ... Elimde uygun bir * nix kutusu yok.


2
2018-02-25 14:48



ya da sadece kullanabilirsin time <script> - warren