Potrafię przekonwertować znacznik czasu unixa na Date()obiekt, umieszczając longwartość w Date()konstruktorze. Na przykład: mógłbym mieć to jako new Date(1318762128031).
Ale potem, jak mogę odzyskać uniksowy znacznik czasu z Date()obiektu?
nadal możesz uzyskać długą wartość obiektu Date, prawda?
Kent
@xEnOn: nie konwertujesz uniksowego znacznika czasu na datę przy użyciu długiego konstruktora. Uniksowy znacznik czasu, jak skomentowałem odpowiedź jackrabbit, jest wyrażany w sekundach, a nie milisekundach. Tutaj: en.wikipedia.org/wiki/Unix_time i tutaj: unixtimestamp.com/index.php Seconds. Nie milisekundy.
getTime()pobiera milisekundy od 1 stycznia 1970 GMT przekazanego konstruktorowi. Uzyskanie z tego czasu uniksowego (tego samego, ale w sekundach) nie powinno być zbyt trudne .
Dzięki. Pamiętałem to błędnie jako funkcję statyczną Date.getTime (new Date ()), która nie działała i myślała, co się dzieje.
Carven
47
@jackrabbit: faktycznie getTime () nie zwraca uniksowego znacznika czasu, ale „Unix timestamp * 1000”. Uzgodniona definicja znacznika czasowego Uniksa jest taka, że podaje on czasy od epoki w sekundach, a nie w milisekundach; )
TacticalCoder
3
@TacticalCoder jackrabbit jest dokładniejszy: zwraca unix-timestamp w milisekundach. Tak, unix-timestamp jest ustalany w sekundach - ale jeśli twoja odpowiedź byłaby prawdziwa, ( getTime() = unixTimestamp * 1000), getTime()zawsze zwróciłoby trzy Zera na końcu, ale w rzeczywistości może zwrócić wszystko od zakończenia 000do 999, co oznacza, że ma wyższą precyzja wynikająca z milisekund, a nie tylko „* 1000”. Znaczenie: porównanie prawdziwego unixTimestamp * 1000 z getTime()wynikiem mogłoby się powieść tylko w ~ 0,1% przypadków.
dognose
Dla przypomnienia, funkcja zwraca milisekundy w obszarze GMT-0 (w Greenwich), więc możesz być bezpieczny przy konwersji tego na inne obszary.
Onat Korucu
50
Aby otrzymać timestampod Date(), musisz podzielić getTime()przez 1000, tj .:
Date currentDate = new Date();
currentDate.getTime() / 1000;
// 1397132691
lub po prostu:
long unixTime = System.currentTimeMillis() / 1000L;
Ale przedstawiony kod zwraca liczbę sekund dla tej chwili
Milan Velebit
To prawda, @MilanVelebit. Będziesz musiał zastąpić żądany Instantzamiast Instant.now(). Lub yourDesiredJavaUtilDate.toInstant()jeśli masz staromodny Dateinterfejs ze starszego interfejsu API.
Ole VV
0
Nie wiem, czy chcesz to osiągnąć w js czy java, w js najprostszy sposób na uzyskanie znacznika czasu uniksowego (jest to czas w sekundach od 01.01.1970) wygląda następująco:
var myDate = new Date();
console.log(+myDate); // +myDateObject give you the unix from that date
Odpowiedzi:
getTime()
pobiera milisekundy od 1 stycznia 1970 GMT przekazanego konstruktorowi. Uzyskanie z tego czasu uniksowego (tego samego, ale w sekundach) nie powinno być zbyt trudne .źródło
getTime() = unixTimestamp * 1000
),getTime()
zawsze zwróciłoby trzy Zera na końcu, ale w rzeczywistości może zwrócić wszystko od zakończenia000
do999
, co oznacza, że ma wyższą precyzja wynikająca z milisekund, a nie tylko „* 1000”. Znaczenie: porównanie prawdziwego unixTimestamp * 1000 zgetTime()
wynikiem mogłoby się powieść tylko w ~ 0,1% przypadków.Aby otrzymać
timestamp
odDate()
, musisz podzielićgetTime()
przez1000
, tj .:Date currentDate = new Date(); currentDate.getTime() / 1000; // 1397132691
lub po prostu:
long unixTime = System.currentTimeMillis() / 1000L;
źródło
new Date().getTime()
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; } }
źródło
W java 8 wygodnie jest użyć nowej biblioteki dat i
getEpochSecond
metody pobierania znacznika czasu (jest w sekundach)Instant.now().getEpochSecond();
źródło
Instant
zamiastInstant.now()
. LubyourDesiredJavaUtilDate.toInstant()
jeśli masz staromodnyDate
interfejs ze starszego interfejsu API.Nie wiem, czy chcesz to osiągnąć w js czy java, w js najprostszy sposób na uzyskanie znacznika czasu uniksowego (jest to czas w sekundach od 01.01.1970) wygląda następująco:
var myDate = new Date(); console.log(+myDate); // +myDateObject give you the unix from that date
źródło
Użyj
SimpleDateFormat
klasy. Spójrz na jego javadoc: wyjaśnia, jak używać przełączników formatu.źródło