# Libnodave und Date_Time per VB.NET



## StefanK (20 Oktober 2010)

Hallo,

ich nutze (mal wieder) Libnodave, um Daten aus einer S7 in Datenbanken zu schaufeln. Erst einmal muss ich sagen Libnodave ist echt super :TOOL: !
Nun aber zu meinem Problem:
DATE_TIME soll gelesen werden, aus einem Datenbaustein und dann ins .NET Format 'DATE' (#01/01/001 12:00:00 AM#) konvertiert werden. Die Anwendung wird mit VB.NET erstellt.
Für ein bisschen Hilfe bin ich sehr dankbar.
Gruß
Stefan


----------



## StefanK (20 Oktober 2010)

*Ich hab'ssssss*

Hi, ich hab's!


```
Dim rv(8) As String
            res = dc(conn).readBytes(nArea, nDBnumber, nStart, 8, buf)
            For i As Integer = 1 To 8
                rv(i) = CInt(dc(conn).getU8.ToString("X")).ToString
            Next
```

Eigentlich ganz einfach. Hab's nur nich geschnallt weil die Funktion von einer meiner anderen kopiert habe und das passte halt nicht ganz.

Gruß
Stefan


----------



## Jochen Kühner (22 Oktober 2010)

*DateTime*

Und wo wird das in deinem Code jetzt ins .Net Format DateTime Konvertiert?


----------



## StefanK (22 Oktober 2010)

*Hab's noch mal geändert/optimiert*

Hier mein Weg:


```
res = dc(conn).readBytes(nArea, nDBnumber, nStart, 6, buf)
            For i As Integer = 1 To 6
                nValue += CInt(dc(conn).getU8.ToString("X")).ToString("00")
            Next
            Dim myDate As Date = DateTime.ParseExact(nValue, "yyMMddHHmmss", System.Globalization.CultureInfo.InvariantCulture)
```

Die ersten 6 Byte sind hierfür ausreichend und das kommt dabei raus: #10/22/2010 11:57:39 PM# (Debugger).

Gruß
Stefan


----------



## Jochen Kühner (23 Oktober 2010)

*hmmm...*

Also Ich hab die Funktion in meine rlibnodave.net.cs welche in meiner connection Lib integriert ist so gemacht:


```
public static DateTime getDateTimefrom(byte[] b, int pos)
    {
        int jahr, monat, tag, stunde, minute, sekunde, mili;
        int bt = b[pos];
        //BCD Umwandlung
        bt = (((bt >> 4)) * 10) + ((bt & 0x0f));
        if (bt < 90)
            jahr = 2000;
        else
            jahr = 1900;
        jahr += bt;

        //Monat
        bt = b[pos + 1];
        monat = (((bt >> 4)) * 10) + ((bt & 0x0f));

        //Tag
        bt = b[pos + 2];
        tag = (((bt >> 4)) * 10) + ((bt & 0x0f));

        //Stunde
        bt = b[pos + 3];
        stunde = (((bt >> 4)) * 10) + ((bt & 0x0f));

        //Minute
        bt = b[pos + 4];
        minute = (((bt >> 4)) * 10) + ((bt & 0x0f));

        //Sekunde
        bt = b[pos + 5];
        sekunde = (((bt >> 4)) * 10) + ((bt & 0x0f));

        //Milisekunden (werden noch nicht verarbeitet...)
        bt = b[pos + 6];
        mili = (((bt >> 4)) * 10) + ((bt & 0x0f));

        //Wochentag
        bt = b[pos + 7];
        try
        {
            return new DateTime(jahr, monat, tag, stunde, minute, sekunde, mili);
        }
        catch(Exception ex)
        {
            return new DateTime(1900, 01, 01, 00, 00, 00);
        }
    }
```


----------

