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

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 年には、合理的なことを必ず行ってください。

于 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 に答える