Charles Day wrote: <a proposal to flag dates with a time of day of 00:00:00>
The problem is that this is an obfuscated flag. If you're going to flag dates, flag them with a new XML field. However unlikely, the 00:00:00 flag will fail, and you have the worst of all possible situations - code that fails *rarely*. If you want to keep the existing file format unchanged, keep it unchanged. New programs are free to use the included timezone to extract the original date - or equivalently, ignore everything except the date. When the timestamps are loaded into a struct tm or equivalent - lo and behold, the month,day,year fields have the correct date. Instead of doing the mktime() thing and dividing by seconds per day (which will fail sometimes - a Very Bad Thing), use a nice julian date routine to compute a day number. Here is an example based on the Gregorian Calendar: JULDAY julian(const struct mmddyy *mdy) { int dyyr,lpyrs,cyrs,clyrs; JULDAY dayno; if (mdy->mm == 99 && mdy->dd == 99) return 0x7FFFFFFF; dyyr=(mdy->mm*275)/9-32+mdy->dd; lpyrs=mdy->yy+4712; dayno=lpyrs*365L; cyrs=clyrs=0; if (mdy->yy>1582) { cyrs=mdy->yy-1500; clyrs=mdy->yy-1200; } if (mdy->mm<3) { cyrs--; clyrs--; lpyrs--; dyyr+=2; } dayno += (dyyr+clyrs/400+lpyrs/4-cyrs/100); if (dayno>2299170L) dayno-=10; /* Oct 5 = Oct 15, 1582 */ return dayno; } Or just use the mdy information as is - but be sure to ignore the rest. When writing timestamps - do whatever tickles your fancy. By using the included timezone (or equivalently ignoring everything except the date), you get the right date in new programs. However, for old versions of gnucash to work as well as they used to, you probably want to do the same thing - or maybe change the time of day to 12:00 (although that makes failure on timezone change rarer - a Bad Thing). _______________________________________________ gnucash-devel mailing list gnucash-devel@gnucash.org https://lists.gnucash.org/mailman/listinfo/gnucash-devel