Date () 'den unix zaman damgası alınıyor


85

Değeri Date()yapıcıya koyarak bir unix zaman damgasını nesneye longdönüştürebilirim Date(). Örneğin: olarak alabilirim new Date(1318762128031).

Ancak bundan sonra Date()nesneden unix zaman damgasını nasıl geri alabilirim ?


Hala Date nesnenizin uzun değerini alabilirsiniz, değil mi?
Kent

@xEnOn: Uzun yapıcıyı kullanarak bir Unix zaman damgasını tarihe dönüştürmüyorsunuz. Jackrabbit'in cevabına yorum yaptığım gibi bir Unix zaman damgası milisaniye olarak değil, saniye cinsinden ifade edilir. Burada: en.wikipedia.org/wiki/Unix_time ve burada: unixtimestamp.com/index.php Saniyeler. Milisaniye değil.
TacticalCoder

Yanıtlar:


95

getTime()1 Ocak 1970 GMT'nin kurucuya geçtiğinden bu yana geçen milisaniyeleri alır. Bundan Unix zamanını (aynı, ancak saniye cinsinden) elde etmek çok zor olmamalı .


1
Teşekkürler. Çalışmayan ve neler olduğunu düşünen statik bir Date.getTime (yeni Date ()) işlevi olarak yanlış hatırlamaya devam ettim.
Carven

47
@jackrabbit: aslında getTime () Unix zaman damgasını değil, "Unix zaman damgasını * 1000" verir. Unix zaman damgasıyla ilgili mutabık kalınan tanım, çağdan itibaren süreleri milisaniye olarak değil, saniyede vermesidir; )
TacticalCoder

3
@TacticalCoder jackrabbit daha doğrudur: Unix-zaman damgasını milisaniye cinsinden döndürür. Evet, Unix zaman damgası saniyede olmayı kabul edilir - ama cevap (gerçek olurdu getTime() = unixTimestamp * 1000), getTime()daima sonunda üç sıfırları dönecekti, ama aslında ile biten bir şey dönebilirsiniz 000için 999daha yüksek olan araçlar, milisaniyelerden kaynaklanan hassasiyet ve sadece "* 1000" değildir. Anlamı: Gerçek bir unixTimestamp * 1000'i sonuçla karşılaştırmak getTime(), vakaların yalnızca ~% 0,1'inde başarılı olur.
dognose

Kayıt için, işlev milisaniyeyi GMT-0 alanında (Greenwich'te) döndürür, böylece bunu farklı alanlara dönüştürme konusunda güvenli olabilirsiniz.
Onat Korucu

50

Bir almak için timestampgelen Date(), sen bölmek gerekir getTime()tarafından 1000, yani:

Date currentDate = new Date();
currentDate.getTime() / 1000;
// 1397132691

ya da sadece:

long unixTime = System.currentTimeMillis() / 1000L;

1
Ya da kısaca:new Date().getTime()
MarkHu

25
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.TimeZone;

public class Timeconversion {
    private DateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmm", Locale.ENGLISH); //Specify your locale

    public long timeConversion(String time) {
        long unixTime = 0;
        dateFormat.setTimeZone(TimeZone.getTimeZone("GMT+5:30")); //Specify your timezone
        try {
            unixTime = dateFormat.parse(time).getTime();
            unixTime = unixTime / 1000;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return unixTime;
    }
}

6

Java 8'de, getEpochSecondzaman damgasını almak için yeni tarih kitaplığını ve yöntemini kullanmak uygundur (saniyede)

Instant.now().getEpochSecond();


Ancak sunulan kod, bu an için saniye
sayısını

Doğru, @MilanVelebit. Bunun Instantyerine istediğinizi değiştirmeniz gerekecek Instant.now(). Veya eski bir API'den eski yourDesiredJavaUtilDate.toInstant()moda bir şey aldıysanız Date.
Ole VV

0

Bunu js veya java'da elde etmek isteyip istemediğinizi bilmiyorum, js'de unix zaman damgasını almanın en basit yolu (bu, 1/1/1970 tarihinden itibaren saniye cinsinden zamandır) aşağıdaki gibidir:

var myDate = new Date();
console.log(+myDate); // +myDateObject give you the unix from that date

-1

SimpleDateFormatSınıfı kullan . Javadoc'una bir göz atın: biçim anahtarlarının nasıl kullanılacağını açıklar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.