menu

arrow_back Hvordan beskriver vi Clarion tid for en kolonne i en database-tabell?

av
(423 poeng) 1 3 11
i Programvare
532 visninger
0 stemmer

Vi har et system med både Clarion Date og Clarion Time i ulike tabeller og kolonner der.

Standarder for dato og tid som er godt definert:
ISO 8601
Unix time

Men jeg finner ikke noen gode referanser i søk på Clarion time (eller Clarion date)?

1 svar

Akseptert svar
0 stemmer
 
Akseptert svar

Clarion DATE og Clarion TIME er datatyper fra det kommersielle (proprietære) utviklingsverktøyet Clarion som ble utviklet av blant annet SoftVelocity. Verktøyet fokuserer på database-applikasjoner og støtter blant annet ISAM, SQL og ADO, samt flatfiler som CSV og kommunikasjon med relasjonsdatabaser via ODBC. Datatypene ble introdusert i Clarion 3.0, sammen med CSTRING, PSTRING, USHORT og ULONG og er lagret som integers i databasestrukturen.

En del av kritikken rettet mot Clarion har vært dårlig dokumentasjon og vanskelige og dyre lisenser. Noe som også reflekteres i definisjonene av datatypene. Disse er uansett følgende:

Definisjon:
Clarion DATE er nummeret med dager siden 28. desember 1800 og tilgjengelige datoer er en rekke mellom 4 (1. januar 1801) og 2 994 626 (31. desember 9999) - Det er ikke mulig å kalkulere korrekt data utenfor dette området. Tallet som representerer en dato kalles for en standard date (SD). Clarion Date justerer også for skuddår mellom SD 4 og SD 2994626. For å finne ukedagen, kan du dele SD X på mod 7 som gir 0=søndag til 6=lørdag.

Clarion TIME er et nummer som representerer antall hundre sekunder siden midnatt +1. Når du ganger dette nummeret med 10, får du millisekunder og kan derfra konvertere til en datatype du trenger.

Konvertering
SD kan konverteres til SQL med følgende spørring:

<!-- lang:sql -->
DECLARE @ClarionToUnixDiff INT = 36163 /* Konverteringsnummer */
DECLARE @UnixToClarionDiff INT = 4 /* Første tillatte standard date */
DECLARE @ClarionDateBase DATE = '1801-01-01' /* Dato i SQL oversatt */

/* Et eksempel: */
DECLARE @unixDate DATE = '2021-03-10'
DECLARE @clarionDate INT = 80426

SELECT
    CONVERT(datetime,@clarionDate-@ClarionToUnixDiff) AS UnixDateTime, /* Clarion date til ISO datetime */
    CONVERT(date,CONVERT(datetime,@clarionDate-@ClarionToUnixDiff)) AS UnixDate, /* Clarion date til ISO date */
    DATEDIFF(d, @ClarionDateBase, @unixDate)+@UnixToClarionDiff as ClarionDate /* ISO date til Clarion date  */
;

Har du en INT datatype i databasen som representerer Clarion TIME, kan du konvertere denne på følgende måte:

<!-- lang:SQL -->
/* Til SQL TIME */
SELECT
    CONVERT(time, dateadd(ms, (ClarionTimeField-1)*10,0));

/* Til tekststreng */
SELECT
    CONVERT(varchar, dateadd(ms, (ClarionTimeFIeld-1)*10,0), 114);

Kilder:
Convert Clarion Standard Time to SQL Time
SoftVelocity Website
Convert a Clarion Date (INT) to SQL DateTime 1
Convert a Clarion Date (INT) to SQL DateTime 2
Clarion date and time in .NET
CLARION Date Conversion C# + DATE ADD/SUBTRACT

av
(380 poeng) 1 2 13
redigert av

1 kommentar

Velkommen!

Søk etter svar, still spørsmål og bidra med kunnskap sammen med norges felleskap på felter som arkiv, konservering og formidling. Alle er velkomne som medlemmer! Her er terskelen for å spørre veldig lav.


Kunngjøringer :

Artikkelmodulen vil snart bli tilgjengelig!