2012-10-28 11 views
7

Do konwersji liczbę sekund DateTime Vb NET, używać kodu następujące:Konwersja dateTime liczba sekund VB NET

Dim startDate As New DateTime(1970, 1, 1) 
    Dim targetDate As DateTime 
    Dim noOfSeconds As Integer = DataInSeconds 

    targetDate = startDate.AddSeconds(noOfSeconds) 

gdzie DataInSeconds oznacza liczbę zawierającą się w sekundach (począwszy od 1/1/1970)

Działa to dobrze. Ale nie wiem, jak dokonać odwrotnej konwersji. (z DateTime do liczby sekund). Czy ktoś może mi pomóc?

Odpowiedz

8

Gdy odjąć DateTime instancje od siebie, dostajesz TimeSpan - można to wykorzystać, aby uzyskać liczbę sekund:

Dim startDate As New DateTime(1970, 1, 1) 
Dim noOfSeconds As Integer 

noOfSeconds = (currentDate - startDate).TotalSeconds 
4

1/1/1970 jest epoka Unix. Pamiętaj, że jest to data UTC, nie możesz tego zignorować w konwersjach. Zatem:

Module DateConversion 
    Public ReadOnly Property Epoch() As DateTime 
     Get 
      Return New DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc) 
     End Get 
    End Property 

    Public Function FromUnix(ByVal seconds As Integer, local As Boolean) As DateTime 
     Dim dt = Epoch.AddSeconds(seconds) 
     If local Then dt = dt.ToLocalTime 
     Return dt 
    End Function 

    Public Function ToUnix(ByVal dt As DateTime) As Integer 
     If dt.Kind = DateTimeKind.Local Then dt = dt.ToUniversalTime 
     Return CInt((dt - Epoch).TotalSeconds) 
    End Function 
End Module 

Uważaj na ToUnix(), to może być nieokreślona DateTimeKind, jak to było we fragmencie. Rozważ użycie DateTimeOffset zamiast tego, aby był jednoznaczny. I pamiętaj, aby zrobić coś sensownego w 2038 roku, kiedy wszystko to upadnie.

0
Label1.Text = New DateTime(1970, 1, 1, 0, 0, 0, 
    DateTimeKind.Utc).AddSeconds(CLng(TextBox1.Text)/1000)  

Dodać pole tekstowe i przycisk i etykietę, umieścić ten kod do przycisku i zależnie od tego czy używasz mikrosekund (utrzymanie/1000) lub sekundach (usunąć/1000) pokaże datę/time itp.