Avatar billede dmk Nybegynder
30. marts 2005 - 11:29 Der er 4 kommentarer og
1 løsning

Extended Stored Procedure : DateTime format

Er der nogen der ved hvordan en datetime kommer til at se ud i en extended stored procedure?

Ifølge dokumentationen får man en 8 byte datetime ud med srv_paraminfo, men der står ikke noget om hvordan denne kan konverteres til noget forståeligt i C++ (fx. en time_t). Jeg har prøvet at kigge lidt i indholdet af hvad jeg får tilbage, og det blev jeg overhovedet ikke klogere af.
Avatar billede arne_v Ekspert
30. marts 2005 - 11:47 #1
docs siger:

Values with the datetime data type are stored internally by Microsoft SQL Server as two 4-byte integers. The first 4 bytes store the number of days before or after the base date, January 1, 1900. The base date is the system reference date. Values for datetime earlier than January 1, 1753, are not permitted. The other 4 bytes store the time of day represented as the number of milliseconds after midnight.
Avatar billede arne_v Ekspert
30. marts 2005 - 11:49 #2
hvis du har en:

int tsqlserver[2];

med data så kan du prøve:

time_t tc = tsqlserver[0]*24*60*60 + tsqlserver[1]/1000;
Avatar billede dmk Nybegynder
30. marts 2005 - 16:05 #3
Det viste sig, at jeg faktisk havde fat i den lange ende, men blot var ret dårlig til at skrive debug-info ud i min fil :(

Det der kommer ud af MSSql er helt rigtigt antal dage efter 1900, og så en long der fortæller hvad klokken er i 300-dele af et sekund. Hvorfor det lige er 300-dele ved jeg ikke, men det er der sikkert en god grund til.
DVS:
long tsqlserver[2];
time_t tc = (tsqlserver[0]-70)*24*60*60 + tsqlserver[1]/300;

Grunden til de -70 er, at en time_t (hvis den kommer fra time() ) er sekunder siden 1970, mens SQLServerens er dage siden 1900.

Hvis du smider et svar får du pointene.

/DMK
Avatar billede arne_v Ekspert
30. marts 2005 - 16:43 #4
ok
Avatar billede dmk Nybegynder
04. april 2005 - 14:57 #5
Tak
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester