Die Community zu .NET und Classic VB.
Menü

VB.NET-Tipp 0138: Unixzeit herausfinden

 von 

Beschreibung

Die Unixzeit gibt die Anzahl Sekunden an, die seit dem 1.1.1970 (GMT/UTC) vergangen sind (Unixzeit ). Die Klasse in diesem Beispiel ermöglicht es, diese in Tagen, Stunden, Minuten, Sekunden oder Millisekunden zu berechnen, sowie Werte (zum Beispiel 15 Tage) in Zeitspannen umzuwandeln.

Schwierigkeitsgrad:

Schwierigkeitsgrad 1

Framework-Version(en):

.NET Framework 1.0, .NET Framework 1.1, .NET Framework 2.0, .NET Framework 3.0, .NET Framework 3.5, .NET Compact Framework 1.0, .NET Compact Framework 2.0, .NET Framework 4

.NET-Version(en):

Visual Basic 2002, Visual Basic 2003, Visual Basic 2005, Visual Basic 2008, Visual Basic 2010

Download:

Download des Beispielprojektes [11,47 KB]

' Dieser Quellcode stammt von http://www.activevb.de
' und kann frei verwendet werden. Für eventuelle Schäden
' wird nicht gehaftet.

' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
' Ansonsten viel Spaß und Erfolg mit diesem Source!

' Projektversion:   Visual Studio 2005
'
' Referenzen: 
'  - System
'  - System.Data
'  - System.Deployment
'  - System.Drawing
'  - System.Windows.Forms
'  - System.Xml
'
' Imports: 
'  - Microsoft.VisualBasic
'  - System
'  - System.Collections
'  - System.Collections.Generic
'  - System.Data
'  - System.Drawing
'  - System.Diagnostics
'  - System.Windows.Forms
'

' ##############################################################################
' ################################# Form1.vb ###################################
' ##############################################################################
Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles Button1.Click

        Dim ut As New UnixTime()
        Dim utf As UnixTime.UnixTimeFormat
        utf = ListBox1.SelectedIndex
        MsgBox("Die Unixzeit in " & CStr(ListBox1.SelectedValue) & _
               " beträgt jetzt " & ut.Get(utf) & " " & _
               CStr(ListBox1.SelectedValue) & "!")
        MsgBox("Nun wird die Unixzeit der Klasse auf 15 Tage geändert.")
        ut.Set(15, UnixTime.UnixTimeFormat.Days)
        MsgBox("15 Tage nach dem 1.1.1970 entsprechen " & _
               CStr(ut.Get()) & " Unixzeit-Sekunden!")
        MsgBox("Man kann die Unixzeit auch statisch als TimeSpan-Objekt " & _
               "abrufen. Sie betrug am 1. Januar 2008  " & _
               UnixTime.GetUnixTimeOfDate(New Date(2008, 1, 1)).TotalSeconds & _
               " Sekunden.")
    End Sub

    Private Sub Form1_Load(ByVal sender As Object, _
                           ByVal e As System.EventArgs) Handles Me.Load

        ListBox1.SelectedIndex = 1
    End Sub
End Class

' ##############################################################################
' ################################ UnixTime.vb #################################
' ##############################################################################
Public Class UnixTime
    Dim time As TimeSpan

    ''' <summary>
    ''' Bestimmt das Ein-/Ausgabeformat der Unixzeit
    ''' </summary>
    Public Enum UnixTimeFormat
        ''' <summary>
        ''' Millisekunden
        ''' </summary>
        Milliseconds = 0
        ''' <summary>
        ''' Sekunden(Standard)
        ''' </summary>
        Seconds
        ''' <summary>
        ''' Minuten
        ''' </summary>
        Minutes
        ''' <summary>
        ''' Stunden
        ''' </summary>
        Hours
        ''' <summary>
        ''' Tage
        ''' </summary>
        Days
    End Enum

    Property TimeSpan() As TimeSpan
        Get
            Return time
        End Get
        Set(ByVal value As TimeSpan)
            time = value
        End Set
    End Property

    ''' <summary>
    ''' Erstellt eine neue Instanz der <see cref="UnixTime" />-Klasse.
    ''' </summary>
    Public Sub New()
        Me.Set(GetUnixTime(UnixTimeFormat.Milliseconds), _
               UnixTimeFormat.Milliseconds)
    End Sub

    Public Sub New(ByVal t As Long, ByVal format As UnixTimeFormat)
        Me.Set(t, format)
    End Sub

    ''' <summary>
    ''' Gibt die Unixzeit im Format <paramref name="format">format</paramref> 
    ''' zurück.
    ''' </summary>
    ''' <param name="format">Das Zeitformat</param>
    ''' <returns></returns>
    Public Function [Get](Optional ByVal format As UnixTimeFormat _
                          = UnixTimeFormat.Seconds) As Long
        Return ConvertTimeSpanToUnixTime(time, format)
    End Function

    ''' <summary>
    ''' Setzt die Unixzeit innerhalb dieser Klasse.
    ''' </summary>
    ''' <param name="value">Ein Long-Wert, der eine Zahl passend zu 
    '''   <paramref name="format">format</paramref> enthält.</param>
    ''' <param name="format">Das Zeitformat des Parameters 
    '''   <paramref name="value">value</paramref>.</param>
    Public Sub [Set](ByVal value As Long, __
            Optional ByVal format As UnixTimeFormat = UnixTimeFormat.Seconds)
        time = ConvertValueToTimeSpan(value, format)
    End Sub

    ''' <summary>
    ''' Gibt die Unixzeit zurück, die bis zu einem bestimmten Datum vergangen
    '''  ist.
    ''' </summary>
    ''' <param name="value">Der Zeitwert</param>
    ''' <param name="format">Das Zeitformat des Parameters 
    '''   <paramref name="value">value</paramref>.</param>
    ''' <returns></returns>
    Public Shared Function ConvertValueToTimeSpan(ByVal value As Long, _
            Optional ByVal format As UnixTimeFormat = _
            UnixTimeFormat.Seconds) As TimeSpan
        Dim d As New TimeSpan(0, 0, 0)
        Select Case format
            Case UnixTimeFormat.Milliseconds
                d = TimeSpan.FromMilliseconds(value)
            Case UnixTimeFormat.Seconds
                d = TimeSpan.FromSeconds(value)
            Case UnixTimeFormat.Minutes
                d = TimeSpan.FromMinutes(value)
            Case UnixTimeFormat.Hours
                d = TimeSpan.FromHours(value)
            Case UnixTimeFormat.Days
                d = TimeSpan.FromDays(value)
            Case Else
                Return Nothing
                Exit Function
        End Select
        Return d
    End Function

    ''' <summary>
    ''' Gibt die Unixzeit im Zeitformat <paramref name="format">format
    '''   </paramref> zurück und weist diesen Zeitwert der Klasse zu.
    ''' </summary>
    ''' <returns>Die Zeitformatierte Unixzeit.</returns>
    Public Shared Function GetUnixTime(Optional ByVal format As UnixTimeFormat _
                                        = UnixTimeFormat.Seconds) As Long
        Dim t As TimeSpan
        t = GetUnixTimeOfDate(Date.UtcNow)
        Return ConvertTimeSpanToUnixTime(t, format)
    End Function

    ''' <summary>
    ''' Gibt die Unixzeit zurück.
    ''' </summary>
    ''' <param name="d">The date of which the unix time is calculated.</param>
    ''' <returns>Eine TimeSpan, die die Unixzeit(die Zeit seit dem 1.1.1970 
    '''   vergangen ist</returns>
    Public Shared Function GetUnixTimeOfDate(ByVal d As Date) As TimeSpan
        Return (d - New DateTime(1970, 1, 1))
    End Function

    ''' <summary>
    ''' Konvertiert eine Zeitspanne in eine Zeitwert im Zeitformat 
    '''   <paramref name="format">format</paramref>.
    ''' </summary>
    ''' <param name="ts">Die zeitspanne</param>
    ''' <param name="format">Das Zeitformat</param>
    ''' <returns></returns>
    Private Shared Function ConvertTimeSpanToUnixTime(ByVal ts As TimeSpan,
            ByVal format As UnixTimeFormat) As Long
        Select Case format
            Case UnixTimeFormat.Milliseconds
                Return ts.TotalMilliseconds
            Case UnixTimeFormat.Seconds
                Return ts.TotalSeconds
            Case UnixTimeFormat.Minutes
                Return ts.TotalMinutes
            Case UnixTimeFormat.Hours
                Return ts.TotalHours
            Case UnixTimeFormat.Days
                Return ts.TotalDays
            Case Else
                Return Nothing
        End Select
    End Function
End Class

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.