Laden...

SQL Funktion BigInt 2 DateTime

Erstellt von Azrael Masters vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.604 Views
A
Azrael Masters Themenstarter:in
38 Beiträge seit 2005
vor 17 Jahren
SQL Funktion BigInt 2 DateTime

Hi ihr lieben,

hab mal wieder ein Frägelchen ^^
Und zwar baue ich ja grade zur Übung an einem Forum und möchte daher die Daten aus meinem WBB Forum übernehmen. Soweit kein Problem, alles mehr oder weniger sauber gelöst 😉

Aber eins gibt mir zu beißen, und zwar speichert das WBB Zeit+Datum als BigInt in der Datenbank, aber ich möchte diese Werte gerne als DateTime in der MS SQL Datenban speichern.

Nun habe ich diese SQL Funktion ergoogelt (mehr war leider nicht zu finden 🙁
Wie müsste die denn in C# aussehen? verzweifelt in die Runde schau

CREATE FUNCTION dbo.udfTicksToDateTime
    (
    @Ticks BIGINT
    )
    RETURNS DATETIME
    AS
    BEGIN

    DECLARE @Days BIGINT
    DECLARE @DaysBefore1753 BIGINT
    DECLARE @TimeTicks BIGINT
    DECLARE @Seconds BIGINT
    
    SET @Days = @Ticks / CONVERT(BIGINT,864000000000)
    SET @DaysBefore1753 = CONVERT(BIGINT,639905)
    SET @TimeTicks = @Ticks % CONVERT(BIGINT,864000000000)
    SET @Seconds = @TimeTicks / CONVERT(BIGINT,10000000)
RETURN DATEADD(s,@Seconds,DATEADD(d,@Days - @DaysBefore1753,CONVERT(DATETIME,'1/1/1753')))
    END 

Ich glaube ich habe sie soweit richtig übersetzt (?) aber die letzte codeline kann ich leider nicht umsetzen?


public static DateTime ConvertBigInt2DateTime(Int32 ticks)
    {
Int32 days;
        Int32 daysBefore1753;
        Int32 timeTicks;
        Int32 seconds;
days = ticks / Convert.ToInt32(864000000000);
        daysBefore1753 = Convert.ToInt32(639905);
        timeTicks = ticks % Convert.ToInt32(864000000000);
        seconds = timeTicks / Convert.ToInt32(10000000);

Hat jemand ne Idee wie ich es es einfacher lösen kann oder den Codeschnippsel nach C# umschreiben kann?

Vielen viele Dank im voraus.

Euer Azzy

[**(¯`·._.·[The Higher Community]·._.·´¯)**](http://www.nexus-der-macht.de/)
3.822 Beiträge seit 2006
vor 17 Jahren

Tipp zu später Stunde :


... .AddDays(...
... .AddSeconds(...
... DateTime.Parse("01.01.1753")... oder
... new DateTime(1753,1,1,0,0,0)...

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

A
Azrael Masters Themenstarter:in
38 Beiträge seit 2005
vor 17 Jahren

Danke für die schnelle antwort, aber ich bekomms irgendwie nich hin 🙁
Zum testen hab übergeb ich die Zahl: 1099853804
(deswegen musst ich auch Int64 nehmen, weil sonst die Wertebereiche zu klein waren. Komischerweiße wird dann days 0.
und ich bin mir gar nicht so sicher, dass das was ich mache richtig is 🙁

*hilfe*


    public static DateTime ConvertBigInt2DateTime(Int64 ticks)
    {
        Int64 days;
        Int64 daysBefore1753;
        Int64 timeTicks;
        Int64 seconds;

        days = ticks / System.Convert.ToInt64(864000000000);
        daysBefore1753 = System.Convert.ToInt64(639905);
        timeTicks = ticks % System.Convert.ToInt64(864000000000);
        seconds = timeTicks / System.Convert.ToInt64(10000000);

DateTime date = new DateTime();
        return date.AddSeconds(seconds).AddDays(days - daysBefore1753).Add(DateTime.Parse("1/1/1753"));
}

[**(¯`·._.·[The Higher Community]·._.·´¯)**](http://www.nexus-der-macht.de/)
A
Azrael Masters Themenstarter:in
38 Beiträge seit 2005
vor 17 Jahren

Keiner ne Idee warum das nicht funktioniert? 🙁

Ich verzweifel noch an den paar zeilen heul

[**(¯`·._.·[The Higher Community]·._.·´¯)**](http://www.nexus-der-macht.de/)
A
Azrael Masters Themenstarter:in
38 Beiträge seit 2005
vor 17 Jahren

hab nun nen umweg gemacht und das ganze in php geschrieben...

dort werden die daten rausselektiert, mit date(bla*bla) in einen datumswert gepresst und dann als nen insert string ausgeben....

@BerndFfm danke für den tipp auch wenn ich leider ausser stande war ihn korrekt zu benutzen, sry 😉

[**(¯`·._.·[The Higher Community]·._.·´¯)**](http://www.nexus-der-macht.de/)