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