Преобразование 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), покажет вам дату/время и т. д.