7

为了将秒数转换为 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

4 回答 4

9

当您DateTime从彼此中减去实例时,您会得到一个TimeSpan- 您可以使用它来获取秒数:

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

noOfSeconds = (currentDate - startDate).TotalSeconds
于 2012-10-28T11:58:36.720 回答
4

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 年做一些合理的事情。

于 2012-10-28T12:24:00.653 回答
0
Label1.Text = New DateTime(1970, 1, 1, 0, 0, 0, 
    DateTimeKind.Utc).AddSeconds(CLng(TextBox1.Text) / 1000)      

制作一个文本框、一个按钮和一个标签,将此代码放入按钮中,根据您使用的是微秒(保留 /1000)还是秒(删除 /1000)将显示日期/时间等。

于 2015-11-29T21:55:05.463 回答
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
于 2019-04-29T14:36:02.340 回答