在VB .NET中将DateTime转换为秒数

时间:2012-10-28 11:51:50

标签: vb.net datetime time datetime-conversion

为了将秒数转换为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是一个包含秒数的整数(从1970年1月1日开始)

这很好用。但我不知道如何进行逆转换。 (从DateTime到秒数)。有人可以帮帮我吗?

4 个答案:

答案 0 :(得分:9)

当您相互减去DateTime个实例时,会得到TimeSpan - 您可以使用它来获取秒数:

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

noOfSeconds = (currentDate - startDate).TotalSeconds

答案 1 :(得分:4)

1970年1月1日是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年做一些合理的事情。

答案 2 :(得分:0)

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

创建一个文本框,一个按钮和一个标签,将此代码放入按钮中,并根据您是否使用微秒(保持/ 1000)或秒(删除/ 1000)将显示日期/时间等。

答案 3 :(得分:0)

Public Function Date2Unix(ByVal vDate As Date) As Long
 Return (vDate - #1970/01/01#).TotalSeconds
End Function

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
 MsgBox(Date2Unix(Now()))
End Sub