Toon posts:

[MySQL] Clarion > MySQL

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ehm, jah, ik moet voor school een programma schrijven voor een stichting. Dit geheel wordt in Java geimplementeerd en er hangt een MySQL database achter. Tot dusver geen probleem.

Alleen het huidige programma dat onze opdrachtgever gebruikt is geschreven in de programmeertaal Clarion. Ik had er zelf nog nooit van gehoord, en kijkende naar de broncode is dat misschien maar goed ook 8)7. Maar nu moet ik dus de bestanden uit het oude programma inlezen, en op de één of andere manier in een SQL scriptje douwen. Op zich niet zo'n heel erg groot probleem, behalve dan dat die bestanden een beetje loos zijn opgebouwd, maar met QuickBasic gaat dat verder prima. Het enige probleem waar ik tegen aanloop zijn datums.

Clarion gebruikt namelijk een getal dat het aantal dagen sinds 28 december 1800. Maar de eerst bruikbare datum is iets van 1 januari 1801, beetje vaag, maar goed. Alleen slikt MySQL dat getalletje dus niet. Dus nu moet ik op de één of andere manier dat getal converteren naar een normale datum. Maar ik heb geen flauw idee hoe. Ik heb al gezocht met Google, maar niks bruikbaars gevonden. Alleen een artikeltje waarin stond dat je iets van 31616 of zo af moest trekken en dan in Excel plaatsen en er een Datum veld van moest maken. Maar dat werkte dus nie echt, en bovendien is dat niet echt een handige aanpak ;). Iemand ideeën hoe 'k 't wel op kan lossen?

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Je moet ff zoeken op Epoch. Dit heb ik hier gevonden:

Java:
1
2
3
4
5
6
7
8
9
DateFormat format = new SimpleDateFormat("MMddyyyy");
Date databaseEpoch = format.parse("12281800");
long offset = databaseEpoch.getTime();
//now you just add the offset to every date that is 
//measured in distance from that 1880 epoch
public static Date convertToUTC(Date date)
{  
   return new Date(date.getTime() + offset);
}

Verwijderd

Topicstarter
Orphix schreef op 02 juni 2003 @ 17:23:
Je moet ff zoeken op Epoch. Dit heb ik hier gevonden:

Java:
1
2
3
4
5
6
7
8
9
DateFormat format = new SimpleDateFormat("MMddyyyy");
Date databaseEpoch = format.parse("12281800");
long offset = databaseEpoch.getTime();
//now you just add the offset to every date that is 
//measured in distance from that 1880 epoch
public static Date convertToUTC(Date date)
{  
   return new Date(date.getTime() + offset);
}
Hmmz, Epoch is toch 't aantal seconden sinds 1 januari 1970 00:00:00 uur? Ennuhm, mjah, 't wordt wel lastig om 't ook eerst nog via Java te laten gaan. Ik moet eigenlijk meteen yyyy-mm-dd formaat hebben in m'n SQL script.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Alleen slikt MySQL dat getalletje dus niet.
Wat slikt hij er niet aan? Krijg je een foutmelding? Is het niet het gewenste formaat? Waarom kun je het dan niet omrekenen?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Topicstarter
drm schreef op 02 June 2003 @ 18:34:
[...]
Wat slikt hij er niet aan? Krijg je een foutmelding? Is het niet het gewenste formaat? Waarom kun je het dan niet omrekenen?
MySQL verwacht datums in 'yyyy-mm-dd' formaat. En dus niet dat getal. Dat betekent dus inderdaad dat ik het moet omrekenen, maar je maakt mij niet wijs dat er niemand al eens op het idee is gekomen om een functie te maken die dat doet.

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Dat kan MySQL zelf (maar iirc zit het ook wel in de Java api):
http://www.mysql.com/doc/en/Date_and_time_functions.html
en dan zoeken naar 'FROM_UNIXTIME':
mysql> SELECT FROM_UNIXTIME(875996580);
-> '1997-10-04 22:23:00'

Verwijderd

Topicstarter
Orphix schreef op 02 June 2003 @ 19:26:
Dat kan MySQL zelf (maar iirc zit het ook wel in de Java api):
http://www.mysql.com/doc/en/Date_and_time_functions.html
en dan zoeken naar 'FROM_UNIXTIME':

[...]
Mjah, dat is dus een ander formaat, want als 'k mijn waarde invul krijg 'k een datum in 1986, maar 't moet ergens in 2002 zijn. Volgens mij is dit het aantal seconden sinds 1 januari 1970 00:00:00 uur. Maar Clarion rekent dus in 't aantal dagen sinds 28 december 1980.

  • JeroenE
  • Registratie: Januari 2001
  • Niet online
Maar Clarion rekent dus in 't aantal dagen sinds 28 december 1980.
Daarnet was het nog 28 december 1800 ?
code:
1
SELECT "1800-12-28 00:00:00" + INTERVAL 73935 DAY;


Alleen dan met jouw getalletjes ipv 73935 natuurlijk.

Edit: als je alleen met dagen werkt kan je de uren, minuten en seconden natuurlijk weglaten :)

[ Voor 20% gewijzigd door JeroenE op 02-06-2003 19:55 ]


Verwijderd

Topicstarter
jeroene schreef op 02 June 2003 @ 19:53:
[...]


Daarnet was het nog 28 december 1800 ?
code:
1
SELECT "1800-12-28 00:00:00" + INTERVAL 73935 DAY;


Alleen dan met jouw getalletjes ipv 73935 natuurlijk.
Dat geeft NULL

  • JeroenE
  • Registratie: Januari 2001
  • Niet online
Dat geeft NULL
Welke verie van MySQL gebruik je dan? Probeer anders eens
code:
1
SELECT DATE_ADD("1800-12-28", INTERVAL 73935 DAY);
Ik heb het net nog even geprobeerd en bij mij werkt het gewoon allebei. Ik heb 4.0.nogwat
Pagina: 1