Преобразование DateTime в количество секунд в VB.NET

для преобразования количества секунд в DateTime в VB .NET я использую следующий код:

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

    targetDate = startDate.AddSeconds(noOfSeconds)

где DataInSeconds-целое число, содержащее количество секунд (начиная с 1/1/1970)

это работает хорошо. Но я не знаю, как сделать обратное преобразование. (от DateTime до количества секунд). Кто-нибудь может мне помочь?

3 ответов


при вычитании DateTime экземпляры друг от друга, вы получаете TimeSpan - вы можете использовать это, чтобы получить количество секунд:

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

noOfSeconds = (currentDate - startDate).TotalSeconds

1/1/1970-это эпоха Unix. Будьте осторожны, что это дата UTC, вы не можете игнорировать это в конверсиях. Таким образом:

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

следите за ToUnix(), DateTimeKind может быть не указан, как это было в вашем фрагменте. Вместо этого используйте DateTimeOffset, чтобы сделать его однозначным. И обязательно сделайте что-нибудь разумное в 2038 году, когда все это рухнет.


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

сделайте текстовое поле и кнопку и метку, поместите этот код в кнопку и в зависимости от того, используете ли вы микросекунды (сохраните /1000) или секунды (удалите /1000), покажет вам дату/время и т. д.