Posted to tcl by sebres at Thu Jan 24 17:21:08 GMT 2019view pretty
sqlite3 db :memory: proc _int {v} { regsub {^\s*([+\-]?)0*(\d+)\s*$} $v {\1\2} } # --------------------- # check julian day: set i 0 while {$i >= -210866803200} { set v1 [expr {[_int [clock format $i -format %J -gmt 1]] - .5}] set v2 [db onecolumn {select julianday(:i, 'unixepoch')}] if {$v1 ne $v2} { error "JD: tcl: $v1 ne sql: $v2, using $i" } incr i [expr {-86400*365}] } # --------------------- # check date-time: set chk_code { set v1 [clock format $i -format "%Y-%m-%d %H:%M:%S" -gmt 1] set v2 [db onecolumn {select datetime(:i, 'unixepoch')}] set v3 [db onecolumn {select datetime(julianday(:i, 'unixepoch'))}] if {$v1 ne $v2 || $v1 ne $v3} { error "by $i, dates: tcl: $v1 ne sql: $v2 or $v3" } } if {[catch { set i 0 while {$i >= -210866803200} { if {[catch $chk_code]} { puts "ERROR: by $i - retry from $last with day interval" set i $last while {$i >= -210866803200} { if {[catch $chk_code]} { puts "ERROR: by $i - retry from $last with second interval" set i $last while {$i >= -210866803200} { eval $chk_code incr i -1 } } set last $i incr i -86400 } } set last $i incr i [expr {-86400*365}] } } msg]} { puts "ERROR: $msg" } # --------------------- puts "\nExplanation with details by check of boundaries:" set i $last if {$i > 0} {incr i -2} else {incr i 2} time { puts "\n$i ==>" puts tcl:\t[clock format $i -format "%Y-%m-%d %H:%M:%S" -gmt 1] puts sql1:\t[db onecolumn {select datetime(:i, 'unixepoch')}] puts sql2:\t[db onecolumn {select datetime(julianday(:i, 'unixepoch'))}] incr i -1 } 5 # --------------------------------------- # results to: # --------------------------------------- if 0 {;# ERROR: by -12235968000 - retry from -12204432000 with day interval ERROR: by -12219379200 - retry from -12219292800 with second interval ERROR: by -12219292801, dates: tcl: 1582-10-04 23:59:59 ne sql: 1582-10-14 23:59:59 or 1582-10-14 23:59:59 Explanation with details by check of boundaries: -12219292798 ==> tcl: 1582-10-15 00:00:02 sql1: 1582-10-15 00:00:02 sql2: 1582-10-15 00:00:02 -12219292799 ==> tcl: 1582-10-15 00:00:01 sql1: 1582-10-15 00:00:01 sql2: 1582-10-15 00:00:01 -12219292800 ==> tcl: 1582-10-15 00:00:00 sql1: 1582-10-15 00:00:00 sql2: 1582-10-15 00:00:00 -12219292801 ==> tcl: 1582-10-04 23:59:59 sql1: 1582-10-14 23:59:59 sql2: 1582-10-14 23:59:59 -12219292802 ==> tcl: 1582-10-04 23:59:58 sql1: 1582-10-14 23:59:58 sql2: 1582-10-14 23:59:58 };#
Comments
Posted by sebres at Thu Jan 24 19:28:32 GMT 2019 [text] [code]
This can be resolved with change of locale GREGORIAN_CHANGE_DATE to something like -0x7fffffff...