I am using mysql Server version: 5.1.31 MySQL Community Server (GPL) on a
MAC 10.5 host. I am having some strange date translation issues when I
insert dates into my tables.
What I do is run perl¹s Spreadsheet::ParseExcel module with Time::JulianDay
to reformat excel dates to insert properly into mysql.
use Spreadsheet::ParseExcel;
use Time::JulianDay;
To reformat the date I run a small code sequence:
$sdate0 = $sdate + julian_day(1900, 1, 0);
($year, $month, $day) = inverse_julian_day($sdate0);
$sdate1 = join '-', $year,$month,$day;
This seems to work fine because I print my output to a file and the date
format appears to be correct:
+++++++++++++++++++++++++++++++++++
NUCO INC
M61037841
ACTIVE
61037841
2815041
RICHARDSON
TX
US
APM00051703278
CX-ATA-DAE
DAE ATA EXPANSION FOR CX
PREMIUM HARDWARE SUPPORT
5
5050.2
2005-8-5
2008-8-6
201
+++++++++++++++++++++++++++++++++++
So my dates show up in the 2008-6-15 format. The problem is when I insert
those dates into my table I either get all 0s or I get a 2040 year (with the
correct month and day):
NUCO INC | 2815487 | RESEARCH TRIANGLE PARK | NC | TN187401264 | 1 |
DMX1000-P2 | DMX-2 U PERF SNGL BAY | 0000-00-00 | 2040-08-06 | 365 | 23275
|
I have had this weird year issue pop up time to time but it was easy enough
to work around it. However, for my current project I really need the dates
in the table to match the dates in the source spreadsheet.
I do see that the dates I am inputing are not in a pure YYYY-MM-DD format-
missing 0s. Its possible that that is the issue but since the date is
getting converted from the underlying Julian date I am not sure how to fix
that.
In case it matters, here is my insert string:
$dbh->do("insert into maintenance
(indate, b2customer, contract, cstatus, customer, party, city, state,
serial, model, mdesc, descr, qty, amlp, sdate, edate, rcsdate, rcedate,
days, contractid)
values
(CURDATE(),\'$b2customer\', \'$contract\', \'$status\', \'$incustomer\',
$party, \'$city\', \'$state\', \'$serial\', \'$model\', \'$mdesc\',
\'$descr\', $qty, $amlp, $sdate, $edate, $rcsdate, $rcedate, $days,
$contractid)");
I have also tried inserting the data as a string but that doesn¹t seem to
make any difference.
Any help would be greatly appreciated. Thank you!
Hagen Finley
Boulder, CO