"Jordan Hayes" <[EMAIL PROTECTED]> wrote:
> I just downloaded Tcl bindings for 3.3.13 and am having trouble with 
> some code that I wrote last year.  Here's my code:
> 
> load tclsqlite3.dll Sqlite3
> sqlite3 db foo.sqb
> 
> set q1 "SELECT DATETIME('now','localtime','start of day') today"
> db eval $q1 x {
>     set today $x(today)
>     puts "today = $today"
> }
> 
> set dq "SELECT DATETIME('$today','localtime','start of day','-1 days') 
> t1,"
> append dq " DATETIME('$today','localtime','start of day','+1 days') t3"
> db eval $dq x {
>     set yesterday [lindex $x(t1) 0]
>     set tomorrow [lindex $x(t3) 0]
>     puts "yesterday=$yesterday tomorrow=$tomorrow"
> }
> 
> Running this script, I get this:
> 
> today = 2007-03-20 00:00:00
> yesterday=2007-03-18 tomorrow=2007-03-20
> 
> Seems to be off somehow....

You appear to be apply the 'localtime' correction twice: once when
you initially compute "today" and then again before you apply
the "-1 day" and "+1 day" operators.

A date in SQLite is not an object that keeps a separate hidden
"actual date" behind the scenes.  A date is just a string.  When
you apply 'localtime' it does not set some display flag - it
actually changes the string.  So you can apply 'localtime' multiple
times and it will keep shifting the date.  For example, consider 
this SQL:

    SELECT 111, datetime('now');
    SELECT 222, datetime('now','localtime');
    SELECT 333, datetime('now','localtime','localtime');
    SELECT 444, datetime('now','localtime','localtime','localtime');

The output is:
    
    111|2007-03-21 01:44:03
    222|2007-03-20 21:44:03
    333|2007-03-20 17:44:03
    444|2007-03-20 13:44:03

With that in mind, go back and remove the extra 'localtime'
modifier and I think your code will work.

--
D. Richard Hipp  <[EMAIL PROTECTED]>


-----------------------------------------------------------------------------
To unsubscribe, send email to [EMAIL PROTECTED]
-----------------------------------------------------------------------------

Reply via email to