2013-01-12 17 views
5

Łączę się do substancji czynnych i jeden z parametrów jest długa (13 cyfr) zachować bieżącą timestamp w VB.NET, który reprezentuje milisekund przeszły od 0:00:00 01.01.1970 in GMT aż aktualny czas.Jak uzyskać prąd timestamp

format powinny być jak ten 1290932238757

Próbowałem to Syntex:

DirectCast((Datetime.Now - New DateTime(1970, 1, 1)).TotalMilliseconds, Int64) 

Ale wyjście było:

01/12/2013 02:06:24 

Odpowiedz

10

Jeśli dobrze rozumiem, to działa?

Dim milliseconds = CLng(DateTime.UtcNow.Subtract(New DateTime(1970, 1, 1)) 
                 .TotalMilliseconds) 

Użyłem DateTime.UtcNow w przykładzie, ale można użyć DateTime.Now zależności jak planujesz używać danych. Aby uzyskać więcej informacji na temat różnicy, zobacz this thread.

+1

działa bardzo dobrze, dziękuję bardzo. – Dan

+0

Nie mogę zrozumieć, jak to działa: Myślę, że powinno to być CLng (DateTime.UtcNow.Subtract (New DateTime (1970, 1, 1)) ToUniversalTime.TotalMilliseconds). W każdym razie ta metoda nie zwraca poprawnego znacznika czasu. Przy wywołaniu @keyboardP zwraca poprawny znacznik czasu, ale jak to jest możliwe, ponieważ porównuje UtcNow i 1/1/1970 (co jest znane z strefy czasowej)? – Desmond

+0

W końcu zrozumiałem. "Nowa data (1,1,1970)" tworzy datę, której strefa czasowa nie jest znana. Metoda .ToUniversalTime przesuwa ją tak, jakby była w localTime. Najlepszym rozwiązaniem powinno być utworzenie strefy czasowej uwzględniającej datę: 'New DateTime (1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc)' – Desmond