为了将秒数转换为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到秒数)。有人可以帮帮我吗?
答案 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