/ Hex Artifact Content
Login
SQLite training in Houston TX on 2019-11-05 (details)
Part of the 2019 Tcl Conference

Artifact 9b73bbeb1b82d9c1f44dec5cf563bf7da58d2373:


0000: 23 20 32 30 30 33 20 4f 63 74 6f 62 65 72 20 33  # 2003 October 3
0010: 31 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72  1.#.# The author
0020: 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72   disclaims copyr
0030: 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75  ight to this sou
0040: 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c  rce code.  In pl
0050: 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c  ace of.# a legal
0060: 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69 73   notice, here is
0070: 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23   a blessing:.#.#
0080: 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 67      May you do g
0090: 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c  ood and not evil
00a0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 66  ..#    May you f
00b0: 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73 20  ind forgiveness 
00c0: 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e 64  for yourself and
00d0: 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73 2e   forgive others.
00e0: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73 68  .#    May you sh
00f0: 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 65  are freely, neve
0100: 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68  r taking more th
0110: 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23  an you give..#.#
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 0a 23 20 54 68 69 73 20 66  *******.# This f
0170: 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72  ile implements r
0180: 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20  egression tests 
0190: 66 6f 72 20 53 51 4c 69 74 65 20 6c 69 62 72 61  for SQLite libra
01a0: 72 79 2e 20 20 54 68 65 0a 23 20 66 6f 63 75 73  ry.  The.# focus
01b0: 20 6f 66 20 74 68 69 73 20 66 69 6c 65 20 69 73   of this file is
01c0: 20 74 65 73 74 69 6e 67 20 64 61 74 65 20 61 6e   testing date an
01d0: 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73  d time functions
01e0: 2e 0a 23 0a 23 20 24 49 64 3a 20 64 61 74 65 2e  ..#.# $Id: date.
01f0: 74 65 73 74 2c 76 20 31 2e 33 34 20 32 30 30 39  test,v 1.34 2009
0200: 2f 30 34 2f 31 36 20 31 32 3a 35 38 3a 30 33 20  /04/16 12:58:03 
0210: 64 72 68 20 45 78 70 20 24 0a 0a 73 65 74 20 74  drh Exp $..set t
0220: 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72  estdir [file dir
0230: 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75  name $argv0].sou
0240: 72 63 65 20 24 74 65 73 74 64 69 72 2f 74 65 73  rce $testdir/tes
0250: 74 65 72 2e 74 63 6c 0a 0a 23 20 44 6f 20 6e 6f  ter.tcl..# Do no
0260: 74 20 75 73 65 20 61 20 63 6f 64 65 63 20 66 6f  t use a codec fo
0270: 72 20 74 65 73 74 73 20 69 6e 20 74 68 69 73 20  r tests in this 
0280: 66 69 6c 65 2c 20 61 73 20 74 68 65 20 64 61 74  file, as the dat
0290: 61 62 61 73 65 20 66 69 6c 65 20 69 73 0a 23 20  abase file is.# 
02a0: 6d 61 6e 69 70 75 6c 61 74 65 64 20 64 69 72 65  manipulated dire
02b0: 63 74 6c 79 20 75 73 69 6e 67 20 74 63 6c 20 73  ctly using tcl s
02c0: 63 72 69 70 74 73 20 28 75 73 69 6e 67 20 74 68  cripts (using th
02d0: 65 20 5b 68 65 78 69 6f 5f 77 72 69 74 65 5d 20  e [hexio_write] 
02e0: 63 6f 6d 6d 61 6e 64 29 2e 0a 23 0a 64 6f 5f 6e  command)..#.do_n
02f0: 6f 74 5f 75 73 65 5f 63 6f 64 65 63 0a 0a 23 20  ot_use_codec..# 
0300: 53 6b 69 70 20 74 68 69 73 20 77 68 6f 6c 65 20  Skip this whole 
0310: 66 69 6c 65 20 69 66 20 64 61 74 65 20 61 6e 64  file if date and
0320: 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20   time functions 
0330: 61 72 65 20 6f 6d 69 74 74 65 64 0a 23 20 61 74  are omitted.# at
0340: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 0a 23 0a   compile-time.#.
0350: 69 66 63 61 70 61 62 6c 65 20 7b 21 64 61 74 65  ifcapable {!date
0360: 74 69 6d 65 7d 20 7b 0a 20 20 66 69 6e 69 73 68  time} {.  finish
0370: 5f 74 65 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d  _test.  return.}
0380: 0a 0a 70 72 6f 63 20 64 61 74 65 74 65 73 74 20  ..proc datetest 
0390: 7b 74 6e 75 6d 20 65 78 70 72 20 72 65 73 75 6c  {tnum expr resul
03a0: 74 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 64  t} {.  do_test d
03b0: 61 74 65 2d 24 74 6e 75 6d 20 5b 73 75 62 73 74  ate-$tnum [subst
03c0: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 22   {.    execsql "
03d0: 53 45 4c 45 43 54 20 63 6f 61 6c 65 73 63 65 28  SELECT coalesce(
03e0: 24 65 78 70 72 2c 27 4e 55 4c 4c 27 29 22 0a 20  $expr,'NULL')". 
03f0: 20 7d 5d 20 5b 6c 69 73 74 20 24 72 65 73 75 6c   }] [list $resul
0400: 74 5d 0a 7d 0a 73 65 74 20 74 63 6c 5f 70 72 65  t].}.set tcl_pre
0410: 63 69 73 69 6f 6e 20 31 35 0a 64 61 74 65 74 65  cision 15.datete
0420: 73 74 20 31 2e 31 20 6a 75 6c 69 61 6e 64 61 79  st 1.1 julianday
0430: 28 27 32 30 30 30 2d 30 31 2d 30 31 27 29 20 32  ('2000-01-01') 2
0440: 34 35 31 35 34 34 2e 35 0a 64 61 74 65 74 65 73  451544.5.datetes
0450: 74 20 31 2e 32 20 6a 75 6c 69 61 6e 64 61 79 28  t 1.2 julianday(
0460: 27 31 39 37 30 2d 30 31 2d 30 31 27 29 20 32 34  '1970-01-01') 24
0470: 34 30 35 38 37 2e 35 0a 64 61 74 65 74 65 73 74  40587.5.datetest
0480: 20 31 2e 33 20 6a 75 6c 69 61 6e 64 61 79 28 27   1.3 julianday('
0490: 31 39 31 30 2d 30 34 2d 32 30 27 29 20 32 34 31  1910-04-20') 241
04a0: 38 37 38 31 2e 35 0a 64 61 74 65 74 65 73 74 20  8781.5.datetest 
04b0: 31 2e 34 20 6a 75 6c 69 61 6e 64 61 79 28 27 31  1.4 julianday('1
04c0: 39 38 36 2d 30 32 2d 30 39 27 29 20 32 34 34 36  986-02-09') 2446
04d0: 34 37 30 2e 35 0a 64 61 74 65 74 65 73 74 20 31  470.5.datetest 1
04e0: 2e 35 20 6a 75 6c 69 61 6e 64 61 79 28 27 31 32  .5 julianday('12
04f0: 3a 30 30 3a 30 30 27 29 20 32 34 35 31 35 34 35  :00:00') 2451545
0500: 2e 30 0a 64 61 74 65 74 65 73 74 20 31 2e 36 20  .0.datetest 1.6 
0510: 7b 6a 75 6c 69 61 6e 64 61 79 28 27 32 30 30 30  {julianday('2000
0520: 2d 30 31 2d 30 31 20 31 32 3a 30 30 3a 30 30 27  -01-01 12:00:00'
0530: 29 7d 20 32 34 35 31 35 34 35 2e 30 0a 64 61 74  )} 2451545.0.dat
0540: 65 74 65 73 74 20 31 2e 37 20 7b 6a 75 6c 69 61  etest 1.7 {julia
0550: 6e 64 61 79 28 27 32 30 30 30 2d 30 31 2d 30 31  nday('2000-01-01
0560: 20 31 32 3a 30 30 27 29 7d 20 32 34 35 31 35 34   12:00')} 245154
0570: 35 2e 30 0a 64 61 74 65 74 65 73 74 20 31 2e 38  5.0.datetest 1.8
0580: 20 6a 75 6c 69 61 6e 64 61 79 28 27 62 6f 67 75   julianday('bogu
0590: 73 27 29 20 4e 55 4c 4c 0a 64 61 74 65 74 65 73  s') NULL.datetes
05a0: 74 20 31 2e 39 20 6a 75 6c 69 61 6e 64 61 79 28  t 1.9 julianday(
05b0: 27 31 39 39 39 2d 31 32 2d 33 31 27 29 20 32 34  '1999-12-31') 24
05c0: 35 31 35 34 33 2e 35 0a 64 61 74 65 74 65 73 74  51543.5.datetest
05d0: 20 31 2e 31 30 20 6a 75 6c 69 61 6e 64 61 79 28   1.10 julianday(
05e0: 27 31 39 39 39 2d 31 32 2d 33 32 27 29 20 4e 55  '1999-12-32') NU
05f0: 4c 4c 0a 64 61 74 65 74 65 73 74 20 31 2e 31 31  LL.datetest 1.11
0600: 20 6a 75 6c 69 61 6e 64 61 79 28 27 31 39 39 39   julianday('1999
0610: 2d 31 33 2d 30 31 27 29 20 4e 55 4c 4c 0a 64 61  -13-01') NULL.da
0620: 74 65 74 65 73 74 20 31 2e 31 32 20 6a 75 6c 69  tetest 1.12 juli
0630: 61 6e 64 61 79 28 27 32 30 30 33 2d 30 32 2d 33  anday('2003-02-3
0640: 31 27 29 20 32 34 35 32 37 30 31 2e 35 0a 64 61  1') 2452701.5.da
0650: 74 65 74 65 73 74 20 31 2e 31 33 20 6a 75 6c 69  tetest 1.13 juli
0660: 61 6e 64 61 79 28 27 32 30 30 33 2d 30 33 2d 30  anday('2003-03-0
0670: 33 27 29 20 32 34 35 32 37 30 31 2e 35 0a 64 61  3') 2452701.5.da
0680: 74 65 74 65 73 74 20 31 2e 31 34 20 6a 75 6c 69  tetest 1.14 juli
0690: 61 6e 64 61 79 28 27 2b 32 30 30 30 2d 30 31 2d  anday('+2000-01-
06a0: 30 31 27 29 20 4e 55 4c 4c 0a 64 61 74 65 74 65  01') NULL.datete
06b0: 73 74 20 31 2e 31 35 20 6a 75 6c 69 61 6e 64 61  st 1.15 julianda
06c0: 79 28 27 32 30 30 2d 30 31 2d 30 31 27 29 20 4e  y('200-01-01') N
06d0: 55 4c 4c 0a 64 61 74 65 74 65 73 74 20 31 2e 31  ULL.datetest 1.1
06e0: 36 20 6a 75 6c 69 61 6e 64 61 79 28 27 32 30 30  6 julianday('200
06f0: 30 2d 31 2d 30 31 27 29 20 4e 55 4c 4c 0a 64 61  0-1-01') NULL.da
0700: 74 65 74 65 73 74 20 31 2e 31 37 20 6a 75 6c 69  tetest 1.17 juli
0710: 61 6e 64 61 79 28 27 32 30 30 30 2d 30 31 2d 31  anday('2000-01-1
0720: 27 29 20 4e 55 4c 4c 0a 64 61 74 65 74 65 73 74  ') NULL.datetest
0730: 20 31 2e 31 38 2e 31 20 7b 6a 75 6c 69 61 6e 64   1.18.1 {juliand
0740: 61 79 28 27 32 30 30 30 2d 30 31 2d 30 31 20 20  ay('2000-01-01  
0750: 20 20 20 31 32 3a 30 30 3a 30 30 27 29 7d 20 32     12:00:00')} 2
0760: 34 35 31 35 34 35 2e 30 0a 64 61 74 65 74 65 73  451545.0.datetes
0770: 74 20 31 2e 31 38 2e 32 20 7b 6a 75 6c 69 61 6e  t 1.18.2 {julian
0780: 64 61 79 28 27 32 30 30 30 2d 30 31 2d 30 31 54  day('2000-01-01T
0790: 31 32 3a 30 30 3a 30 30 27 29 7d 20 32 34 35 31  12:00:00')} 2451
07a0: 35 34 35 2e 30 0a 64 61 74 65 74 65 73 74 20 31  545.0.datetest 1
07b0: 2e 31 38 2e 33 20 7b 6a 75 6c 69 61 6e 64 61 79  .18.3 {julianday
07c0: 28 27 32 30 30 30 2d 30 31 2d 30 31 20 54 31 32  ('2000-01-01 T12
07d0: 3a 30 30 3a 30 30 27 29 7d 20 32 34 35 31 35 34  :00:00')} 245154
07e0: 35 2e 30 0a 64 61 74 65 74 65 73 74 20 31 2e 31  5.0.datetest 1.1
07f0: 38 2e 34 20 7b 6a 75 6c 69 61 6e 64 61 79 28 27  8.4 {julianday('
0800: 32 30 30 30 2d 30 31 2d 30 31 54 20 31 32 3a 30  2000-01-01T 12:0
0810: 30 3a 30 30 27 29 7d 20 32 34 35 31 35 34 35 2e  0:00')} 2451545.
0820: 30 0a 64 61 74 65 74 65 73 74 20 31 2e 31 38 2e  0.datetest 1.18.
0830: 34 20 7b 6a 75 6c 69 61 6e 64 61 79 28 27 32 30  4 {julianday('20
0840: 30 30 2d 30 31 2d 30 31 20 54 20 31 32 3a 30 30  00-01-01 T 12:00
0850: 3a 30 30 27 29 7d 20 32 34 35 31 35 34 35 2e 30  :00')} 2451545.0
0860: 0a 64 61 74 65 74 65 73 74 20 31 2e 31 39 20 7b  .datetest 1.19 {
0870: 6a 75 6c 69 61 6e 64 61 79 28 27 32 30 30 30 2d  julianday('2000-
0880: 30 31 2d 30 31 20 31 32 3a 30 30 3a 30 30 2e 31  01-01 12:00:00.1
0890: 27 29 7d 20 20 20 32 34 35 31 35 34 35 2e 30 30  ')}   2451545.00
08a0: 30 30 30 31 31 36 0a 64 61 74 65 74 65 73 74 20  000116.datetest 
08b0: 31 2e 32 30 20 7b 6a 75 6c 69 61 6e 64 61 79 28  1.20 {julianday(
08c0: 27 32 30 30 30 2d 30 31 2d 30 31 20 31 32 3a 30  '2000-01-01 12:0
08d0: 30 3a 30 30 2e 30 31 27 29 7d 20 20 32 34 35 31  0:00.01')}  2451
08e0: 35 34 35 2e 30 30 30 30 30 30 31 32 0a 64 61 74  545.00000012.dat
08f0: 65 74 65 73 74 20 31 2e 32 31 20 7b 6a 75 6c 69  etest 1.21 {juli
0900: 61 6e 64 61 79 28 27 32 30 30 30 2d 30 31 2d 30  anday('2000-01-0
0910: 31 20 31 32 3a 30 30 3a 30 30 2e 30 30 31 27 29  1 12:00:00.001')
0920: 7d 20 32 34 35 31 35 34 35 2e 30 30 30 30 30 30  } 2451545.000000
0930: 30 31 0a 64 61 74 65 74 65 73 74 20 31 2e 32 32  01.datetest 1.22
0940: 20 7b 6a 75 6c 69 61 6e 64 61 79 28 27 32 30 30   {julianday('200
0950: 30 2d 30 31 2d 30 31 20 31 32 3a 30 30 3a 30 30  0-01-01 12:00:00
0960: 2e 27 29 7d 20 4e 55 4c 4c 0a 64 61 74 65 74 65  .')} NULL.datete
0970: 73 74 20 31 2e 32 33 20 6a 75 6c 69 61 6e 64 61  st 1.23 julianda
0980: 79 28 31 32 33 34 35 2e 36 29 20 31 32 33 34 35  y(12345.6) 12345
0990: 2e 36 0a 64 61 74 65 74 65 73 74 20 31 2e 32 33  .6.datetest 1.23
09a0: 62 20 6a 75 6c 69 61 6e 64 61 79 28 31 37 32 31  b julianday(1721
09b0: 30 35 39 2e 35 29 20 31 37 32 31 30 35 39 2e 35  059.5) 1721059.5
09c0: 0a 64 61 74 65 74 65 73 74 20 31 2e 32 34 20 7b  .datetest 1.24 {
09d0: 6a 75 6c 69 61 6e 64 61 79 28 27 32 30 30 31 2d  julianday('2001-
09e0: 30 31 2d 30 31 20 31 32 3a 30 30 3a 30 30 20 62  01-01 12:00:00 b
09f0: 6f 67 75 73 27 29 7d 20 4e 55 4c 4c 0a 64 61 74  ogus')} NULL.dat
0a00: 65 74 65 73 74 20 31 2e 32 35 20 7b 6a 75 6c 69  etest 1.25 {juli
0a10: 61 6e 64 61 79 28 27 32 30 30 31 2d 30 31 2d 30  anday('2001-01-0
0a20: 31 20 62 6f 67 75 73 27 29 7d 20 4e 55 4c 4c 0a  1 bogus')} NULL.
0a30: 64 61 74 65 74 65 73 74 20 31 2e 32 36 20 7b 6a  datetest 1.26 {j
0a40: 75 6c 69 61 6e 64 61 79 28 27 32 30 30 31 2d 30  ulianday('2001-0
0a50: 31 2d 30 31 20 31 32 3a 36 30 3a 30 30 27 29 7d  1-01 12:60:00')}
0a60: 20 4e 55 4c 4c 0a 64 61 74 65 74 65 73 74 20 31   NULL.datetest 1
0a70: 2e 32 37 20 7b 6a 75 6c 69 61 6e 64 61 79 28 27  .27 {julianday('
0a80: 32 30 30 31 2d 30 31 2d 30 31 20 31 32 3a 35 39  2001-01-01 12:59
0a90: 3a 36 30 27 29 7d 20 4e 55 4c 4c 0a 64 61 74 65  :60')} NULL.date
0aa0: 74 65 73 74 20 31 2e 32 38 20 7b 6a 75 6c 69 61  test 1.28 {julia
0ab0: 6e 64 61 79 28 27 32 30 30 31 2d 30 30 2d 30 31  nday('2001-00-01
0ac0: 27 29 7d 20 4e 55 4c 4c 0a 64 61 74 65 74 65 73  ')} NULL.datetes
0ad0: 74 20 31 2e 32 39 20 7b 6a 75 6c 69 61 6e 64 61  t 1.29 {julianda
0ae0: 79 28 27 32 30 30 31 2d 30 31 2d 30 30 27 29 7d  y('2001-01-00')}
0af0: 20 4e 55 4c 4c 0a 0a 64 61 74 65 74 65 73 74 20   NULL..datetest 
0b00: 32 2e 31 20 64 61 74 65 74 69 6d 65 28 30 2c 27  2.1 datetime(0,'
0b10: 75 6e 69 78 65 70 6f 63 68 27 29 20 7b 31 39 37  unixepoch') {197
0b20: 30 2d 30 31 2d 30 31 20 30 30 3a 30 30 3a 30 30  0-01-01 00:00:00
0b30: 7d 0a 64 61 74 65 74 65 73 74 20 32 2e 31 62 20  }.datetest 2.1b 
0b40: 64 61 74 65 74 69 6d 65 28 30 2c 27 75 6e 69 78  datetime(0,'unix
0b50: 65 70 6f 63 27 29 20 4e 55 4c 4c 0a 64 61 74 65  epoc') NULL.date
0b60: 74 65 73 74 20 32 2e 31 63 20 64 61 74 65 74 69  test 2.1c dateti
0b70: 6d 65 28 30 2c 27 75 6e 69 78 65 70 6f 63 68 78  me(0,'unixepochx
0b80: 27 29 20 4e 55 4c 4c 0a 64 61 74 65 74 65 73 74  ') NULL.datetest
0b90: 20 32 2e 31 64 20 64 61 74 65 74 69 6d 65 28 27   2.1d datetime('
0ba0: 32 30 30 33 2d 31 30 2d 32 32 27 2c 27 75 6e 69  2003-10-22','uni
0bb0: 78 65 70 6f 63 68 27 29 20 4e 55 4c 4c 0a 64 61  xepoch') NULL.da
0bc0: 74 65 74 65 73 74 20 32 2e 32 20 64 61 74 65 74  tetest 2.2 datet
0bd0: 69 6d 65 28 39 34 36 36 38 34 38 30 30 2c 27 75  ime(946684800,'u
0be0: 6e 69 78 65 70 6f 63 68 27 29 20 7b 32 30 30 30  nixepoch') {2000
0bf0: 2d 30 31 2d 30 31 20 30 30 3a 30 30 3a 30 30 7d  -01-01 00:00:00}
0c00: 0a 64 61 74 65 74 65 73 74 20 32 2e 32 62 20 64  .datetest 2.2b d
0c10: 61 74 65 74 69 6d 65 28 27 39 34 36 36 38 34 38  atetime('9466848
0c20: 30 30 27 2c 27 75 6e 69 78 65 70 6f 63 68 27 29  00','unixepoch')
0c30: 20 7b 32 30 30 30 2d 30 31 2d 30 31 20 30 30 3a   {2000-01-01 00:
0c40: 30 30 3a 30 30 7d 0a 66 6f 72 20 7b 73 65 74 20  00:00}.for {set 
0c50: 69 20 30 7d 20 7b 24 69 3c 31 30 30 30 7d 20 7b  i 0} {$i<1000} {
0c60: 69 6e 63 72 20 69 7d 20 7b 0a 20 20 73 65 74 20  incr i} {.  set 
0c70: 73 71 6c 20 5b 66 6f 72 6d 61 74 20 7b 73 74 72  sql [format {str
0c80: 66 74 69 6d 65 28 27 25 25 48 3a 25 25 4d 3a 25  ftime('%%H:%%M:%
0c90: 25 66 27 2c 31 32 33 37 39 36 32 34 38 30 2e 25  %f',1237962480.%
0ca0: 30 33 64 2c 27 75 6e 69 78 65 70 6f 63 68 27 29  03d,'unixepoch')
0cb0: 7d 20 24 69 5d 0a 20 20 73 65 74 20 72 65 73 20  } $i].  set res 
0cc0: 5b 66 6f 72 6d 61 74 20 7b 30 36 3a 32 38 3a 30  [format {06:28:0
0cd0: 30 2e 25 30 33 64 7d 20 24 69 5d 0a 20 20 64 61  0.%03d} $i].  da
0ce0: 74 65 74 65 73 74 20 32 2e 32 63 2d 24 69 20 24  tetest 2.2c-$i $
0cf0: 73 71 6c 20 24 72 65 73 0a 7d 0a 64 61 74 65 74  sql $res.}.datet
0d00: 65 73 74 20 32 2e 33 20 7b 64 61 74 65 28 27 32  est 2.3 {date('2
0d10: 30 30 33 2d 31 30 2d 32 32 27 2c 27 77 65 65 6b  003-10-22','week
0d20: 64 61 79 20 30 27 29 7d 20 32 30 30 33 2d 31 30  day 0')} 2003-10
0d30: 2d 32 36 0a 64 61 74 65 74 65 73 74 20 32 2e 34  -26.datetest 2.4
0d40: 20 7b 64 61 74 65 28 27 32 30 30 33 2d 31 30 2d   {date('2003-10-
0d50: 32 32 27 2c 27 77 65 65 6b 64 61 79 20 31 27 29  22','weekday 1')
0d60: 7d 20 32 30 30 33 2d 31 30 2d 32 37 0a 64 61 74  } 2003-10-27.dat
0d70: 65 74 65 73 74 20 32 2e 34 61 20 7b 64 61 74 65  etest 2.4a {date
0d80: 28 27 32 30 30 33 2d 31 30 2d 32 32 27 2c 27 77  ('2003-10-22','w
0d90: 65 65 6b 64 61 79 20 20 31 27 29 7d 20 32 30 30  eekday  1')} 200
0da0: 33 2d 31 30 2d 32 37 0a 64 61 74 65 74 65 73 74  3-10-27.datetest
0db0: 20 32 2e 34 62 20 7b 64 61 74 65 28 27 32 30 30   2.4b {date('200
0dc0: 33 2d 31 30 2d 32 32 27 2c 27 77 65 65 6b 64 61  3-10-22','weekda
0dd0: 79 20 20 31 78 27 29 7d 20 4e 55 4c 4c 0a 64 61  y  1x')} NULL.da
0de0: 74 65 74 65 73 74 20 32 2e 34 63 20 7b 64 61 74  tetest 2.4c {dat
0df0: 65 28 27 32 30 30 33 2d 31 30 2d 32 32 27 2c 27  e('2003-10-22','
0e00: 77 65 65 6b 64 61 79 20 20 2d 31 27 29 7d 20 4e  weekday  -1')} N
0e10: 55 4c 4c 0a 64 61 74 65 74 65 73 74 20 32 2e 34  ULL.datetest 2.4
0e20: 64 20 7b 64 61 74 65 28 27 32 30 30 33 2d 31 30  d {date('2003-10
0e30: 2d 32 32 27 2c 27 77 65 61 6b 64 61 79 20 20 31  -22','weakday  1
0e40: 78 27 29 7d 20 4e 55 4c 4c 0a 64 61 74 65 74 65  x')} NULL.datete
0e50: 73 74 20 32 2e 34 65 20 7b 64 61 74 65 28 27 32  st 2.4e {date('2
0e60: 30 30 33 2d 31 30 2d 32 32 27 2c 27 77 65 65 6b  003-10-22','week
0e70: 64 61 79 20 27 29 7d 20 4e 55 4c 4c 0a 64 61 74  day ')} NULL.dat
0e80: 65 74 65 73 74 20 32 2e 35 20 7b 64 61 74 65 28  etest 2.5 {date(
0e90: 27 32 30 30 33 2d 31 30 2d 32 32 27 2c 27 77 65  '2003-10-22','we
0ea0: 65 6b 64 61 79 20 32 27 29 7d 20 32 30 30 33 2d  ekday 2')} 2003-
0eb0: 31 30 2d 32 38 0a 64 61 74 65 74 65 73 74 20 32  10-28.datetest 2
0ec0: 2e 36 20 7b 64 61 74 65 28 27 32 30 30 33 2d 31  .6 {date('2003-1
0ed0: 30 2d 32 32 27 2c 27 77 65 65 6b 64 61 79 20 33  0-22','weekday 3
0ee0: 27 29 7d 20 32 30 30 33 2d 31 30 2d 32 32 0a 64  ')} 2003-10-22.d
0ef0: 61 74 65 74 65 73 74 20 32 2e 37 20 7b 64 61 74  atetest 2.7 {dat
0f00: 65 28 27 32 30 30 33 2d 31 30 2d 32 32 27 2c 27  e('2003-10-22','
0f10: 77 65 65 6b 64 61 79 20 34 27 29 7d 20 32 30 30  weekday 4')} 200
0f20: 33 2d 31 30 2d 32 33 0a 64 61 74 65 74 65 73 74  3-10-23.datetest
0f30: 20 32 2e 38 20 7b 64 61 74 65 28 27 32 30 30 33   2.8 {date('2003
0f40: 2d 31 30 2d 32 32 27 2c 27 77 65 65 6b 64 61 79  -10-22','weekday
0f50: 20 35 27 29 7d 20 32 30 30 33 2d 31 30 2d 32 34   5')} 2003-10-24
0f60: 0a 64 61 74 65 74 65 73 74 20 32 2e 39 20 7b 64  .datetest 2.9 {d
0f70: 61 74 65 28 27 32 30 30 33 2d 31 30 2d 32 32 27  ate('2003-10-22'
0f80: 2c 27 77 65 65 6b 64 61 79 20 36 27 29 7d 20 32  ,'weekday 6')} 2
0f90: 30 30 33 2d 31 30 2d 32 35 0a 64 61 74 65 74 65  003-10-25.datete
0fa0: 73 74 20 32 2e 31 30 20 7b 64 61 74 65 28 27 32  st 2.10 {date('2
0fb0: 30 30 33 2d 31 30 2d 32 32 27 2c 27 77 65 65 6b  003-10-22','week
0fc0: 64 61 79 20 37 27 29 7d 20 4e 55 4c 4c 0a 64 61  day 7')} NULL.da
0fd0: 74 65 74 65 73 74 20 32 2e 31 31 20 7b 64 61 74  tetest 2.11 {dat
0fe0: 65 28 27 32 30 30 33 2d 31 30 2d 32 32 27 2c 27  e('2003-10-22','
0ff0: 77 65 65 6b 64 61 79 20 35 2e 35 27 29 7d 20 4e  weekday 5.5')} N
1000: 55 4c 4c 0a 64 61 74 65 74 65 73 74 20 32 2e 31  ULL.datetest 2.1
1010: 32 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30  2 {datetime('200
1020: 33 2d 31 30 2d 32 32 20 31 32 3a 33 34 27 2c 27  3-10-22 12:34','
1030: 77 65 65 6b 64 61 79 20 30 27 29 7d 20 7b 32 30  weekday 0')} {20
1040: 30 33 2d 31 30 2d 32 36 20 31 32 3a 33 34 3a 30  03-10-26 12:34:0
1050: 30 7d 0a 64 61 74 65 74 65 73 74 20 32 2e 31 33  0}.datetest 2.13
1060: 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30 33   {datetime('2003
1070: 2d 31 30 2d 32 32 20 31 32 3a 33 34 27 2c 27 73  -10-22 12:34','s
1080: 74 61 72 74 20 6f 66 20 6d 6f 6e 74 68 27 29 7d  tart of month')}
1090: 20 5c 0a 20 20 20 7b 32 30 30 33 2d 31 30 2d 30   \.   {2003-10-0
10a0: 31 20 30 30 3a 30 30 3a 30 30 7d 0a 64 61 74 65  1 00:00:00}.date
10b0: 74 65 73 74 20 32 2e 31 34 20 7b 64 61 74 65 74  test 2.14 {datet
10c0: 69 6d 65 28 27 32 30 30 33 2d 31 30 2d 32 32 20  ime('2003-10-22 
10d0: 31 32 3a 33 34 27 2c 27 73 74 61 72 74 20 6f 66  12:34','start of
10e0: 20 79 65 61 72 27 29 7d 20 5c 0a 20 20 20 7b 32   year')} \.   {2
10f0: 30 30 33 2d 30 31 2d 30 31 20 30 30 3a 30 30 3a  003-01-01 00:00:
1100: 30 30 7d 0a 64 61 74 65 74 65 73 74 20 32 2e 31  00}.datetest 2.1
1110: 35 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30  5 {datetime('200
1120: 33 2d 31 30 2d 32 32 20 31 32 3a 33 34 27 2c 27  3-10-22 12:34','
1130: 73 74 61 72 74 20 6f 66 20 64 61 79 27 29 7d 20  start of day')} 
1140: 5c 0a 20 20 20 7b 32 30 30 33 2d 31 30 2d 32 32  \.   {2003-10-22
1150: 20 30 30 3a 30 30 3a 30 30 7d 0a 64 61 74 65 74   00:00:00}.datet
1160: 65 73 74 20 32 2e 31 35 61 20 7b 64 61 74 65 74  est 2.15a {datet
1170: 69 6d 65 28 27 32 30 30 33 2d 31 30 2d 32 32 20  ime('2003-10-22 
1180: 31 32 3a 33 34 27 2c 27 73 74 61 72 74 20 6f 66  12:34','start of
1190: 27 29 7d 20 4e 55 4c 4c 0a 64 61 74 65 74 65 73  ')} NULL.datetes
11a0: 74 20 32 2e 31 35 62 20 7b 64 61 74 65 74 69 6d  t 2.15b {datetim
11b0: 65 28 27 32 30 30 33 2d 31 30 2d 32 32 20 31 32  e('2003-10-22 12
11c0: 3a 33 34 27 2c 27 73 74 61 72 74 20 6f 66 20 62  :34','start of b
11d0: 6f 67 75 73 27 29 7d 20 4e 55 4c 4c 0a 64 61 74  ogus')} NULL.dat
11e0: 65 74 65 73 74 20 32 2e 31 36 20 74 69 6d 65 28  etest 2.16 time(
11f0: 27 31 32 3a 33 34 3a 35 36 2e 34 33 27 29 20 31  '12:34:56.43') 1
1200: 32 3a 33 34 3a 35 36 0a 64 61 74 65 74 65 73 74  2:34:56.datetest
1210: 20 32 2e 31 37 20 7b 64 61 74 65 74 69 6d 65 28   2.17 {datetime(
1220: 27 32 30 30 33 2d 31 30 2d 32 32 20 31 32 3a 33  '2003-10-22 12:3
1230: 34 27 2c 27 31 20 64 61 79 27 29 7d 20 7b 32 30  4','1 day')} {20
1240: 30 33 2d 31 30 2d 32 33 20 31 32 3a 33 34 3a 30  03-10-23 12:34:0
1250: 30 7d 0a 64 61 74 65 74 65 73 74 20 32 2e 31 38  0}.datetest 2.18
1260: 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30 33   {datetime('2003
1270: 2d 31 30 2d 32 32 20 31 32 3a 33 34 27 2c 27 2b  -10-22 12:34','+
1280: 31 20 64 61 79 27 29 7d 20 7b 32 30 30 33 2d 31  1 day')} {2003-1
1290: 30 2d 32 33 20 31 32 3a 33 34 3a 30 30 7d 0a 64  0-23 12:34:00}.d
12a0: 61 74 65 74 65 73 74 20 32 2e 31 39 20 7b 64 61  atetest 2.19 {da
12b0: 74 65 74 69 6d 65 28 27 32 30 30 33 2d 31 30 2d  tetime('2003-10-
12c0: 32 32 20 31 32 3a 33 34 27 2c 27 2b 31 2e 32 35  22 12:34','+1.25
12d0: 20 64 61 79 27 29 7d 20 7b 32 30 30 33 2d 31 30   day')} {2003-10
12e0: 2d 32 33 20 31 38 3a 33 34 3a 30 30 7d 0a 64 61  -23 18:34:00}.da
12f0: 74 65 74 65 73 74 20 32 2e 32 30 20 7b 64 61 74  tetest 2.20 {dat
1300: 65 74 69 6d 65 28 27 32 30 30 33 2d 31 30 2d 32  etime('2003-10-2
1310: 32 20 31 32 3a 33 34 27 2c 27 2d 31 2e 30 20 64  2 12:34','-1.0 d
1320: 61 79 27 29 7d 20 7b 32 30 30 33 2d 31 30 2d 32  ay')} {2003-10-2
1330: 31 20 31 32 3a 33 34 3a 30 30 7d 0a 64 61 74 65  1 12:34:00}.date
1340: 74 65 73 74 20 32 2e 32 31 20 7b 64 61 74 65 74  test 2.21 {datet
1350: 69 6d 65 28 27 32 30 30 33 2d 31 30 2d 32 32 20  ime('2003-10-22 
1360: 31 32 3a 33 34 27 2c 27 31 20 6d 6f 6e 74 68 27  12:34','1 month'
1370: 29 7d 20 7b 32 30 30 33 2d 31 31 2d 32 32 20 31  )} {2003-11-22 1
1380: 32 3a 33 34 3a 30 30 7d 0a 64 61 74 65 74 65 73  2:34:00}.datetes
1390: 74 20 32 2e 32 32 20 7b 64 61 74 65 74 69 6d 65  t 2.22 {datetime
13a0: 28 27 32 30 30 33 2d 31 30 2d 32 32 20 31 32 3a  ('2003-10-22 12:
13b0: 33 34 27 2c 27 31 31 20 6d 6f 6e 74 68 27 29 7d  34','11 month')}
13c0: 20 7b 32 30 30 34 2d 30 39 2d 32 32 20 31 32 3a   {2004-09-22 12:
13d0: 33 34 3a 30 30 7d 0a 64 61 74 65 74 65 73 74 20  34:00}.datetest 
13e0: 32 2e 32 33 20 7b 64 61 74 65 74 69 6d 65 28 27  2.23 {datetime('
13f0: 32 30 30 33 2d 31 30 2d 32 32 20 31 32 3a 33 34  2003-10-22 12:34
1400: 27 2c 27 2d 31 33 20 6d 6f 6e 74 68 27 29 7d 20  ','-13 month')} 
1410: 7b 32 30 30 32 2d 30 39 2d 32 32 20 31 32 3a 33  {2002-09-22 12:3
1420: 34 3a 30 30 7d 0a 64 61 74 65 74 65 73 74 20 32  4:00}.datetest 2
1430: 2e 32 34 20 7b 64 61 74 65 74 69 6d 65 28 27 32  .24 {datetime('2
1440: 30 30 33 2d 31 30 2d 32 32 20 31 32 3a 33 34 27  003-10-22 12:34'
1450: 2c 27 31 2e 35 20 6d 6f 6e 74 68 73 27 29 7d 20  ,'1.5 months')} 
1460: 7b 32 30 30 33 2d 31 32 2d 30 37 20 31 32 3a 33  {2003-12-07 12:3
1470: 34 3a 30 30 7d 0a 64 61 74 65 74 65 73 74 20 32  4:00}.datetest 2
1480: 2e 32 35 20 7b 64 61 74 65 74 69 6d 65 28 27 32  .25 {datetime('2
1490: 30 30 33 2d 31 30 2d 32 32 20 31 32 3a 33 34 27  003-10-22 12:34'
14a0: 2c 27 2d 35 20 79 65 61 72 73 27 29 7d 20 7b 31  ,'-5 years')} {1
14b0: 39 39 38 2d 31 30 2d 32 32 20 31 32 3a 33 34 3a  998-10-22 12:34:
14c0: 30 30 7d 0a 64 61 74 65 74 65 73 74 20 32 2e 32  00}.datetest 2.2
14d0: 36 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30  6 {datetime('200
14e0: 33 2d 31 30 2d 32 32 20 31 32 3a 33 34 27 2c 27  3-10-22 12:34','
14f0: 2b 31 30 2e 35 20 6d 69 6e 75 74 65 73 27 29 7d  +10.5 minutes')}
1500: 20 5c 0a 20 20 7b 32 30 30 33 2d 31 30 2d 32 32   \.  {2003-10-22
1510: 20 31 32 3a 34 34 3a 33 30 7d 0a 64 61 74 65 74   12:44:30}.datet
1520: 65 73 74 20 32 2e 32 37 20 7b 64 61 74 65 74 69  est 2.27 {dateti
1530: 6d 65 28 27 32 30 30 33 2d 31 30 2d 32 32 20 31  me('2003-10-22 1
1540: 32 3a 33 34 27 2c 27 2d 31 2e 32 35 20 68 6f 75  2:34','-1.25 hou
1550: 72 73 27 29 7d 20 5c 0a 20 20 7b 32 30 30 33 2d  rs')} \.  {2003-
1560: 31 30 2d 32 32 20 31 31 3a 31 39 3a 30 30 7d 0a  10-22 11:19:00}.
1570: 64 61 74 65 74 65 73 74 20 32 2e 32 38 20 7b 64  datetest 2.28 {d
1580: 61 74 65 74 69 6d 65 28 27 32 30 30 33 2d 31 30  atetime('2003-10
1590: 2d 32 32 20 31 32 3a 33 34 27 2c 27 31 31 2e 32  -22 12:34','11.2
15a0: 35 20 73 65 63 6f 6e 64 73 27 29 7d 20 5c 0a 20  5 seconds')} \. 
15b0: 20 7b 32 30 30 33 2d 31 30 2d 32 32 20 31 32 3a   {2003-10-22 12:
15c0: 33 34 3a 31 31 7d 0a 64 61 74 65 74 65 73 74 20  34:11}.datetest 
15d0: 32 2e 32 39 20 7b 64 61 74 65 74 69 6d 65 28 27  2.29 {datetime('
15e0: 32 30 30 33 2d 31 30 2d 32 32 20 31 32 3a 32 34  2003-10-22 12:24
15f0: 27 2c 27 2b 35 20 62 6f 67 75 73 27 29 7d 20 4e  ','+5 bogus')} N
1600: 55 4c 4c 0a 64 61 74 65 74 65 73 74 20 32 2e 33  ULL.datetest 2.3
1610: 30 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30  0 {datetime('200
1620: 33 2d 31 30 2d 32 32 20 31 32 3a 32 34 27 2c 27  3-10-22 12:24','
1630: 2b 2b 2b 27 29 7d 20 4e 55 4c 4c 0a 64 61 74 65  +++')} NULL.date
1640: 74 65 73 74 20 32 2e 33 31 20 7b 64 61 74 65 74  test 2.31 {datet
1650: 69 6d 65 28 27 32 30 30 33 2d 31 30 2d 32 32 20  ime('2003-10-22 
1660: 31 32 3a 32 34 27 2c 27 2b 31 32 2e 33 65 34 20  12:24','+12.3e4 
1670: 66 65 6d 74 6f 73 65 63 6f 6e 64 73 27 29 7d 20  femtoseconds')} 
1680: 4e 55 4c 4c 0a 64 61 74 65 74 65 73 74 20 32 2e  NULL.datetest 2.
1690: 33 32 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30  32 {datetime('20
16a0: 30 33 2d 31 30 2d 32 32 20 31 32 3a 32 34 27 2c  03-10-22 12:24',
16b0: 27 2b 31 32 2e 33 65 34 20 75 53 27 29 7d 20 4e  '+12.3e4 uS')} N
16c0: 55 4c 4c 0a 64 61 74 65 74 65 73 74 20 32 2e 33  ULL.datetest 2.3
16d0: 33 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30  3 {datetime('200
16e0: 33 2d 31 30 2d 32 32 20 31 32 3a 32 34 27 2c 27  3-10-22 12:24','
16f0: 2b 31 20 61 62 63 27 29 7d 20 4e 55 4c 4c 0a 64  +1 abc')} NULL.d
1700: 61 74 65 74 65 73 74 20 32 2e 33 34 20 7b 64 61  atetest 2.34 {da
1710: 74 65 74 69 6d 65 28 27 32 30 30 33 2d 31 30 2d  tetime('2003-10-
1720: 32 32 20 31 32 3a 32 34 27 2c 27 2b 31 20 61 62  22 12:24','+1 ab
1730: 63 64 27 29 7d 20 4e 55 4c 4c 0a 64 61 74 65 74  cd')} NULL.datet
1740: 65 73 74 20 32 2e 33 35 20 7b 64 61 74 65 74 69  est 2.35 {dateti
1750: 6d 65 28 27 32 30 30 33 2d 31 30 2d 32 32 20 31  me('2003-10-22 1
1760: 32 3a 32 34 27 2c 27 2b 31 20 61 62 63 64 65 27  2:24','+1 abcde'
1770: 29 7d 20 4e 55 4c 4c 0a 64 61 74 65 74 65 73 74  )} NULL.datetest
1780: 20 32 2e 33 36 20 7b 64 61 74 65 74 69 6d 65 28   2.36 {datetime(
1790: 27 32 30 30 33 2d 31 30 2d 32 32 20 31 32 3a 32  '2003-10-22 12:2
17a0: 34 27 2c 27 2b 31 20 61 62 63 64 65 66 27 29 7d  4','+1 abcdef')}
17b0: 20 4e 55 4c 4c 0a 64 61 74 65 74 65 73 74 20 32   NULL.datetest 2
17c0: 2e 33 37 20 7b 64 61 74 65 74 69 6d 65 28 27 32  .37 {datetime('2
17d0: 30 30 33 2d 31 30 2d 32 32 20 31 32 3a 32 34 27  003-10-22 12:24'
17e0: 2c 27 2b 31 20 61 62 63 64 65 66 67 27 29 7d 20  ,'+1 abcdefg')} 
17f0: 4e 55 4c 4c 0a 64 61 74 65 74 65 73 74 20 32 2e  NULL.datetest 2.
1800: 33 38 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30  38 {datetime('20
1810: 30 33 2d 31 30 2d 32 32 20 31 32 3a 32 34 27 2c  03-10-22 12:24',
1820: 27 2b 31 20 61 62 63 64 65 66 67 68 27 29 7d 20  '+1 abcdefgh')} 
1830: 4e 55 4c 4c 0a 64 61 74 65 74 65 73 74 20 32 2e  NULL.datetest 2.
1840: 33 39 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30  39 {datetime('20
1850: 30 33 2d 31 30 2d 32 32 20 31 32 3a 32 34 27 2c  03-10-22 12:24',
1860: 27 2b 31 20 61 62 63 64 65 66 67 68 69 27 29 7d  '+1 abcdefghi')}
1870: 20 4e 55 4c 4c 0a 73 65 74 20 73 71 6c 69 74 65   NULL.set sqlite
1880: 5f 63 75 72 72 65 6e 74 5f 74 69 6d 65 20 31 31  _current_time 11
1890: 39 39 32 34 33 30 34 35 0a 64 61 74 65 74 65 73  99243045.datetes
18a0: 74 20 32 2e 34 30 20 7b 64 61 74 65 74 69 6d 65  t 2.40 {datetime
18b0: 28 29 7d 20 7b 32 30 30 38 2d 30 31 2d 30 32 20  ()} {2008-01-02 
18c0: 30 33 3a 30 34 3a 30 35 7d 0a 73 65 74 20 73 71  03:04:05}.set sq
18d0: 6c 69 74 65 5f 63 75 72 72 65 6e 74 5f 74 69 6d  lite_current_tim
18e0: 65 20 30 0a 64 61 74 65 74 65 73 74 20 32 2e 34  e 0.datetest 2.4
18f0: 31 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30  1 {datetime('200
1900: 33 2d 31 30 2d 32 32 20 31 32 3a 32 34 27 2c 27  3-10-22 12:24','
1910: 32 33 20 73 65 63 6f 6e 64 73 27 29 7d 20 7b 32  23 seconds')} {2
1920: 30 30 33 2d 31 30 2d 32 32 20 31 32 3a 32 34 3a  003-10-22 12:24:
1930: 32 33 7d 0a 64 61 74 65 74 65 73 74 20 32 2e 34  23}.datetest 2.4
1940: 32 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30  2 {datetime('200
1950: 33 2d 31 30 2d 32 32 20 31 32 3a 32 34 27 2c 27  3-10-22 12:24','
1960: 33 34 35 20 73 65 63 6f 6e 64 27 29 7d 20 7b 32  345 second')} {2
1970: 30 30 33 2d 31 30 2d 32 32 20 31 32 3a 32 39 3a  003-10-22 12:29:
1980: 34 35 7d 0a 64 61 74 65 74 65 73 74 20 32 2e 34  45}.datetest 2.4
1990: 33 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30  3 {datetime('200
19a0: 33 2d 31 30 2d 32 32 20 31 32 3a 32 34 27 2c 27  3-10-22 12:24','
19b0: 34 20 73 65 63 6f 6e 64 27 29 7d 20 7b 32 30 30  4 second')} {200
19c0: 33 2d 31 30 2d 32 32 20 31 32 3a 32 34 3a 30 34  3-10-22 12:24:04
19d0: 7d 0a 64 61 74 65 74 65 73 74 20 32 2e 34 34 20  }.datetest 2.44 
19e0: 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30 33 2d  {datetime('2003-
19f0: 31 30 2d 32 32 20 31 32 3a 32 34 27 2c 27 35 36  10-22 12:24','56
1a00: 20 73 65 63 6f 6e 64 27 29 7d 20 7b 32 30 30 33   second')} {2003
1a10: 2d 31 30 2d 32 32 20 31 32 3a 32 34 3a 35 36 7d  -10-22 12:24:56}
1a20: 0a 64 61 74 65 74 65 73 74 20 32 2e 34 35 20 7b  .datetest 2.45 {
1a30: 64 61 74 65 74 69 6d 65 28 27 32 30 30 33 2d 31  datetime('2003-1
1a40: 30 2d 32 32 20 31 32 3a 32 34 27 2c 27 36 30 20  0-22 12:24','60 
1a50: 73 65 63 6f 6e 64 27 29 7d 20 7b 32 30 30 33 2d  second')} {2003-
1a60: 31 30 2d 32 32 20 31 32 3a 32 35 3a 30 30 7d 0a  10-22 12:25:00}.
1a70: 64 61 74 65 74 65 73 74 20 32 2e 34 36 20 7b 64  datetest 2.46 {d
1a80: 61 74 65 74 69 6d 65 28 27 32 30 30 33 2d 31 30  atetime('2003-10
1a90: 2d 32 32 20 31 32 3a 32 34 27 2c 27 37 30 20 73  -22 12:24','70 s
1aa0: 65 63 6f 6e 64 27 29 7d 20 7b 32 30 30 33 2d 31  econd')} {2003-1
1ab0: 30 2d 32 32 20 31 32 3a 32 35 3a 31 30 7d 0a 64  0-22 12:25:10}.d
1ac0: 61 74 65 74 65 73 74 20 32 2e 34 37 20 7b 64 61  atetest 2.47 {da
1ad0: 74 65 74 69 6d 65 28 27 32 30 30 33 2d 31 30 2d  tetime('2003-10-
1ae0: 32 32 20 31 32 3a 32 34 27 2c 27 38 2e 36 20 73  22 12:24','8.6 s
1af0: 65 63 6f 6e 64 73 27 29 7d 20 7b 32 30 30 33 2d  econds')} {2003-
1b00: 31 30 2d 32 32 20 31 32 3a 32 34 3a 30 38 7d 0a  10-22 12:24:08}.
1b10: 64 61 74 65 74 65 73 74 20 32 2e 34 38 20 7b 64  datetest 2.48 {d
1b20: 61 74 65 74 69 6d 65 28 27 32 30 30 33 2d 31 30  atetime('2003-10
1b30: 2d 32 32 20 31 32 3a 32 34 27 2c 27 39 2e 34 20  -22 12:24','9.4 
1b40: 73 65 63 6f 6e 64 27 29 7d 20 7b 32 30 30 33 2d  second')} {2003-
1b50: 31 30 2d 32 32 20 31 32 3a 32 34 3a 30 39 7d 0a  10-22 12:24:09}.
1b60: 64 61 74 65 74 65 73 74 20 32 2e 34 39 20 7b 64  datetest 2.49 {d
1b70: 61 74 65 74 69 6d 65 28 27 32 30 30 33 2d 31 30  atetime('2003-10
1b80: 2d 32 32 20 31 32 3a 32 34 27 2c 27 30 30 30 30  -22 12:24','0000
1b90: 20 73 65 63 6f 6e 64 27 29 7d 20 7b 32 30 30 33   second')} {2003
1ba0: 2d 31 30 2d 32 32 20 31 32 3a 32 34 3a 30 30 7d  -10-22 12:24:00}
1bb0: 0a 64 61 74 65 74 65 73 74 20 32 2e 35 30 20 7b  .datetest 2.50 {
1bc0: 64 61 74 65 74 69 6d 65 28 27 32 30 30 33 2d 31  datetime('2003-1
1bd0: 30 2d 32 32 20 31 32 3a 32 34 27 2c 27 30 30 30  0-22 12:24','000
1be0: 31 20 73 65 63 6f 6e 64 27 29 7d 20 7b 32 30 30  1 second')} {200
1bf0: 33 2d 31 30 2d 32 32 20 31 32 3a 32 34 3a 30 31  3-10-22 12:24:01
1c00: 7d 0a 64 61 74 65 74 65 73 74 20 32 2e 35 31 20  }.datetest 2.51 
1c10: 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30 33 2d  {datetime('2003-
1c20: 31 30 2d 32 32 20 31 32 3a 32 34 27 2c 27 6e 6f  10-22 12:24','no
1c30: 6e 73 65 6e 73 65 27 29 7d 20 4e 55 4c 4c 0a 0a  nsense')} NULL..
1c40: 64 61 74 65 74 65 73 74 20 33 2e 31 20 7b 73 74  datetest 3.1 {st
1c50: 72 66 74 69 6d 65 28 27 25 64 27 2c 27 32 30 30  rftime('%d','200
1c60: 33 2d 31 30 2d 33 31 20 31 32 3a 33 34 3a 35 36  3-10-31 12:34:56
1c70: 2e 34 33 32 27 29 7d 20 33 31 0a 64 61 74 65 74  .432')} 31.datet
1c80: 65 73 74 20 33 2e 32 2e 31 20 7b 73 74 72 66 74  est 3.2.1 {strft
1c90: 69 6d 65 28 27 70 72 65 25 66 70 6f 73 74 27 2c  ime('pre%fpost',
1ca0: 27 32 30 30 33 2d 31 30 2d 33 31 20 31 32 3a 33  '2003-10-31 12:3
1cb0: 34 3a 35 36 2e 34 33 32 27 29 7d 20 70 72 65 35  4:56.432')} pre5
1cc0: 36 2e 34 33 32 70 6f 73 74 0a 64 61 74 65 74 65  6.432post.datete
1cd0: 73 74 20 33 2e 32 2e 32 20 7b 73 74 72 66 74 69  st 3.2.2 {strfti
1ce0: 6d 65 28 27 25 66 27 2c 27 32 30 30 33 2d 31 30  me('%f','2003-10
1cf0: 2d 33 31 20 31 32 3a 33 34 3a 35 39 2e 39 39 39  -31 12:34:59.999
1d00: 39 39 39 39 27 29 7d 20 35 39 2e 39 39 39 0a 64  9999')} 59.999.d
1d10: 61 74 65 74 65 73 74 20 33 2e 33 20 7b 73 74 72  atetest 3.3 {str
1d20: 66 74 69 6d 65 28 27 25 48 27 2c 27 32 30 30 33  ftime('%H','2003
1d30: 2d 31 30 2d 33 31 20 31 32 3a 33 34 3a 35 36 2e  -10-31 12:34:56.
1d40: 34 33 32 27 29 7d 20 31 32 0a 64 61 74 65 74 65  432')} 12.datete
1d50: 73 74 20 33 2e 34 20 7b 73 74 72 66 74 69 6d 65  st 3.4 {strftime
1d60: 28 27 25 6a 27 2c 27 32 30 30 33 2d 31 30 2d 33  ('%j','2003-10-3
1d70: 31 20 31 32 3a 33 34 3a 35 36 2e 34 33 32 27 29  1 12:34:56.432')
1d80: 7d 20 33 30 34 0a 64 61 74 65 74 65 73 74 20 33  } 304.datetest 3
1d90: 2e 35 20 7b 73 74 72 66 74 69 6d 65 28 27 25 4a  .5 {strftime('%J
1da0: 27 2c 27 32 30 30 33 2d 31 30 2d 33 31 20 31 32  ','2003-10-31 12
1db0: 3a 33 34 3a 35 36 2e 34 33 32 27 29 7d 20 32 34  :34:56.432')} 24
1dc0: 35 32 39 34 34 2e 30 32 34 32 36 34 32 35 39 0a  52944.024264259.
1dd0: 64 61 74 65 74 65 73 74 20 33 2e 36 20 7b 73 74  datetest 3.6 {st
1de0: 72 66 74 69 6d 65 28 27 25 6d 27 2c 27 32 30 30  rftime('%m','200
1df0: 33 2d 31 30 2d 33 31 20 31 32 3a 33 34 3a 35 36  3-10-31 12:34:56
1e00: 2e 34 33 32 27 29 7d 20 31 30 0a 64 61 74 65 74  .432')} 10.datet
1e10: 65 73 74 20 33 2e 37 20 7b 73 74 72 66 74 69 6d  est 3.7 {strftim
1e20: 65 28 27 25 4d 27 2c 27 32 30 30 33 2d 31 30 2d  e('%M','2003-10-
1e30: 33 31 20 31 32 3a 33 34 3a 35 36 2e 34 33 32 27  31 12:34:56.432'
1e40: 29 7d 20 33 34 0a 64 61 74 65 74 65 73 74 20 33  )} 34.datetest 3
1e50: 2e 38 2e 31 20 7b 73 74 72 66 74 69 6d 65 28 27  .8.1 {strftime('
1e60: 25 73 27 2c 27 32 30 30 33 2d 31 30 2d 33 31 20  %s','2003-10-31 
1e70: 31 32 3a 33 34 3a 35 36 2e 34 33 32 27 29 7d 20  12:34:56.432')} 
1e80: 31 30 36 37 36 30 33 36 39 36 0a 64 61 74 65 74  1067603696.datet
1e90: 65 73 74 20 33 2e 38 2e 32 20 7b 73 74 72 66 74  est 3.8.2 {strft
1ea0: 69 6d 65 28 27 25 73 27 2c 27 32 30 33 38 2d 30  ime('%s','2038-0
1eb0: 31 2d 31 39 20 30 33 3a 31 34 3a 30 37 27 29 7d  1-19 03:14:07')}
1ec0: 20 32 31 34 37 34 38 33 36 34 37 0a 64 61 74 65   2147483647.date
1ed0: 74 65 73 74 20 33 2e 38 2e 33 20 7b 73 74 72 66  test 3.8.3 {strf
1ee0: 74 69 6d 65 28 27 25 73 27 2c 27 32 30 33 38 2d  time('%s','2038-
1ef0: 30 31 2d 31 39 20 30 33 3a 31 34 3a 30 38 27 29  01-19 03:14:08')
1f00: 7d 20 32 31 34 37 34 38 33 36 34 38 0a 64 61 74  } 2147483648.dat
1f10: 65 74 65 73 74 20 33 2e 38 2e 34 20 7b 73 74 72  etest 3.8.4 {str
1f20: 66 74 69 6d 65 28 27 25 73 27 2c 27 32 32 30 31  ftime('%s','2201
1f30: 2d 30 34 2d 30 39 20 31 32 3a 30 30 3a 30 30 27  -04-09 12:00:00'
1f40: 29 7d 20 37 32 39 38 31 36 34 38 30 30 0a 64 61  )} 7298164800.da
1f50: 74 65 74 65 73 74 20 33 2e 38 2e 35 20 7b 73 74  tetest 3.8.5 {st
1f60: 72 66 74 69 6d 65 28 27 25 73 27 2c 27 39 39 39  rftime('%s','999
1f70: 39 2d 31 32 2d 33 31 20 32 33 3a 35 39 3a 35 39  9-12-31 23:59:59
1f80: 27 29 7d 20 32 35 33 34 30 32 33 30 30 37 39 39  ')} 253402300799
1f90: 0a 64 61 74 65 74 65 73 74 20 33 2e 38 2e 36 20  .datetest 3.8.6 
1fa0: 7b 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27  {strftime('%s','
1fb0: 31 39 36 39 2d 31 32 2d 33 31 20 32 33 3a 35 39  1969-12-31 23:59
1fc0: 3a 35 39 27 29 7d 20 2d 31 0a 64 61 74 65 74 65  :59')} -1.datete
1fd0: 73 74 20 33 2e 38 2e 37 20 7b 73 74 72 66 74 69  st 3.8.7 {strfti
1fe0: 6d 65 28 27 25 73 27 2c 27 31 39 30 31 2d 31 32  me('%s','1901-12
1ff0: 2d 31 33 20 32 30 3a 34 35 3a 35 32 27 29 7d 20  -13 20:45:52')} 
2000: 2d 32 31 34 37 34 38 33 36 34 38 0a 64 61 74 65  -2147483648.date
2010: 74 65 73 74 20 33 2e 38 2e 38 20 7b 73 74 72 66  test 3.8.8 {strf
2020: 74 69 6d 65 28 27 25 73 27 2c 27 31 39 30 31 2d  time('%s','1901-
2030: 31 32 2d 31 33 20 32 30 3a 34 35 3a 35 31 27 29  12-13 20:45:51')
2040: 7d 20 2d 32 31 34 37 34 38 33 36 34 39 0a 64 61  } -2147483649.da
2050: 74 65 74 65 73 74 20 33 2e 38 2e 39 20 7b 73 74  tetest 3.8.9 {st
2060: 72 66 74 69 6d 65 28 27 25 73 27 2c 27 31 37 37  rftime('%s','177
2070: 36 2d 30 37 2d 30 34 20 30 30 3a 30 30 3a 30 30  6-07-04 00:00:00
2080: 27 29 7d 20 2d 36 31 30 36 30 36 30 38 30 30 0a  ')} -6106060800.
2090: 64 61 74 65 74 65 73 74 20 33 2e 39 20 7b 73 74  datetest 3.9 {st
20a0: 72 66 74 69 6d 65 28 27 25 53 27 2c 27 32 30 30  rftime('%S','200
20b0: 33 2d 31 30 2d 33 31 20 31 32 3a 33 34 3a 35 36  3-10-31 12:34:56
20c0: 2e 34 33 32 27 29 7d 20 35 36 0a 64 61 74 65 74  .432')} 56.datet
20d0: 65 73 74 20 33 2e 31 30 20 7b 73 74 72 66 74 69  est 3.10 {strfti
20e0: 6d 65 28 27 25 77 27 2c 27 32 30 30 33 2d 31 30  me('%w','2003-10
20f0: 2d 33 31 20 31 32 3a 33 34 3a 35 36 2e 34 33 32  -31 12:34:56.432
2100: 27 29 7d 20 35 0a 64 61 74 65 74 65 73 74 20 33  ')} 5.datetest 3
2110: 2e 31 31 2e 31 20 7b 73 74 72 66 74 69 6d 65 28  .11.1 {strftime(
2120: 27 25 57 27 2c 27 32 30 30 33 2d 31 30 2d 33 31  '%W','2003-10-31
2130: 20 31 32 3a 33 34 3a 35 36 2e 34 33 32 27 29 7d   12:34:56.432')}
2140: 20 34 33 0a 64 61 74 65 74 65 73 74 20 33 2e 31   43.datetest 3.1
2150: 31 2e 32 20 7b 73 74 72 66 74 69 6d 65 28 27 25  1.2 {strftime('%
2160: 57 27 2c 27 32 30 30 34 2d 30 31 2d 30 31 27 29  W','2004-01-01')
2170: 7d 20 30 30 0a 64 61 74 65 74 65 73 74 20 33 2e  } 00.datetest 3.
2180: 31 31 2e 33 20 7b 73 74 72 66 74 69 6d 65 28 27  11.3 {strftime('
2190: 25 57 27 2c 27 32 30 30 34 2d 30 31 2d 30 32 27  %W','2004-01-02'
21a0: 29 7d 20 30 30 0a 64 61 74 65 74 65 73 74 20 33  )} 00.datetest 3
21b0: 2e 31 31 2e 34 20 7b 73 74 72 66 74 69 6d 65 28  .11.4 {strftime(
21c0: 27 25 57 27 2c 27 32 30 30 34 2d 30 31 2d 30 33  '%W','2004-01-03
21d0: 27 29 7d 20 30 30 0a 64 61 74 65 74 65 73 74 20  ')} 00.datetest 
21e0: 33 2e 31 31 2e 35 20 7b 73 74 72 66 74 69 6d 65  3.11.5 {strftime
21f0: 28 27 61 62 63 25 57 78 79 7a 27 2c 27 32 30 30  ('abc%Wxyz','200
2200: 34 2d 30 31 2d 30 34 27 29 7d 20 61 62 63 30 30  4-01-04')} abc00
2210: 78 79 7a 0a 64 61 74 65 74 65 73 74 20 33 2e 31  xyz.datetest 3.1
2220: 31 2e 36 20 7b 73 74 72 66 74 69 6d 65 28 27 25  1.6 {strftime('%
2230: 57 27 2c 27 32 30 30 34 2d 30 31 2d 30 35 27 29  W','2004-01-05')
2240: 7d 20 30 31 0a 64 61 74 65 74 65 73 74 20 33 2e  } 01.datetest 3.
2250: 31 31 2e 37 20 7b 73 74 72 66 74 69 6d 65 28 27  11.7 {strftime('
2260: 25 57 27 2c 27 32 30 30 34 2d 30 31 2d 30 36 27  %W','2004-01-06'
2270: 29 7d 20 30 31 0a 64 61 74 65 74 65 73 74 20 33  )} 01.datetest 3
2280: 2e 31 31 2e 38 20 7b 73 74 72 66 74 69 6d 65 28  .11.8 {strftime(
2290: 27 25 57 27 2c 27 32 30 30 34 2d 30 31 2d 30 37  '%W','2004-01-07
22a0: 27 29 7d 20 30 31 0a 64 61 74 65 74 65 73 74 20  ')} 01.datetest 
22b0: 33 2e 31 31 2e 39 20 7b 73 74 72 66 74 69 6d 65  3.11.9 {strftime
22c0: 28 27 25 57 27 2c 27 32 30 30 34 2d 30 31 2d 30  ('%W','2004-01-0
22d0: 38 27 29 7d 20 30 31 0a 64 61 74 65 74 65 73 74  8')} 01.datetest
22e0: 20 33 2e 31 31 2e 31 30 20 7b 73 74 72 66 74 69   3.11.10 {strfti
22f0: 6d 65 28 27 25 57 27 2c 27 32 30 30 34 2d 30 31  me('%W','2004-01
2300: 2d 30 39 27 29 7d 20 30 31 0a 64 61 74 65 74 65  -09')} 01.datete
2310: 73 74 20 33 2e 31 31 2e 31 31 20 7b 73 74 72 66  st 3.11.11 {strf
2320: 74 69 6d 65 28 27 25 57 27 2c 27 32 30 30 34 2d  time('%W','2004-
2330: 30 37 2d 31 38 27 29 7d 20 32 38 0a 64 61 74 65  07-18')} 28.date
2340: 74 65 73 74 20 33 2e 31 31 2e 31 32 20 7b 73 74  test 3.11.12 {st
2350: 72 66 74 69 6d 65 28 27 25 57 27 2c 27 32 30 30  rftime('%W','200
2360: 34 2d 31 32 2d 33 31 27 29 7d 20 35 32 0a 64 61  4-12-31')} 52.da
2370: 74 65 74 65 73 74 20 33 2e 31 31 2e 31 33 20 7b  tetest 3.11.13 {
2380: 73 74 72 66 74 69 6d 65 28 27 25 57 27 2c 27 32  strftime('%W','2
2390: 30 30 37 2d 31 32 2d 33 31 27 29 7d 20 35 33 0a  007-12-31')} 53.
23a0: 64 61 74 65 74 65 73 74 20 33 2e 31 31 2e 31 34  datetest 3.11.14
23b0: 20 7b 73 74 72 66 74 69 6d 65 28 27 25 57 27 2c   {strftime('%W',
23c0: 27 32 30 30 37 2d 30 31 2d 30 31 27 29 7d 20 30  '2007-01-01')} 0
23d0: 31 0a 64 61 74 65 74 65 73 74 20 33 2e 31 31 2e  1.datetest 3.11.
23e0: 31 35 20 7b 73 74 72 66 74 69 6d 65 28 27 25 57  15 {strftime('%W
23f0: 20 25 6a 27 2c 32 34 35 34 31 30 39 2e 30 34 31   %j',2454109.041
2400: 34 30 39 37 30 29 7d 20 7b 30 32 20 30 30 38 7d  40970)} {02 008}
2410: 0a 64 61 74 65 74 65 73 74 20 33 2e 31 31 2e 31  .datetest 3.11.1
2420: 36 20 7b 73 74 72 66 74 69 6d 65 28 27 25 57 20  6 {strftime('%W 
2430: 25 6a 27 2c 32 34 35 34 31 30 39 2e 30 34 31 34  %j',2454109.0414
2440: 30 39 37 31 29 7d 20 7b 30 32 20 30 30 38 7d 0a  0971)} {02 008}.
2450: 64 61 74 65 74 65 73 74 20 33 2e 31 31 2e 31 37  datetest 3.11.17
2460: 20 7b 73 74 72 66 74 69 6d 65 28 27 25 57 20 25   {strftime('%W %
2470: 6a 27 2c 32 34 35 34 31 30 39 2e 30 34 31 34 30  j',2454109.04140
2480: 39 37 32 29 7d 20 7b 30 32 20 30 30 38 7d 0a 64  972)} {02 008}.d
2490: 61 74 65 74 65 73 74 20 33 2e 31 31 2e 31 38 20  atetest 3.11.18 
24a0: 7b 73 74 72 66 74 69 6d 65 28 27 25 57 20 25 6a  {strftime('%W %j
24b0: 27 2c 32 34 35 34 31 30 39 2e 30 34 31 34 30 39  ',2454109.041409
24c0: 37 33 29 7d 20 7b 30 32 20 30 30 38 7d 0a 64 61  73)} {02 008}.da
24d0: 74 65 74 65 73 74 20 33 2e 31 31 2e 31 39 20 7b  tetest 3.11.19 {
24e0: 73 74 72 66 74 69 6d 65 28 27 25 57 20 25 6a 27  strftime('%W %j'
24f0: 2c 32 34 35 34 31 30 39 2e 30 34 31 34 30 39 37  ,2454109.0414097
2500: 34 29 7d 20 7b 30 32 20 30 30 38 7d 0a 64 61 74  4)} {02 008}.dat
2510: 65 74 65 73 74 20 33 2e 31 31 2e 32 30 20 7b 73  etest 3.11.20 {s
2520: 74 72 66 74 69 6d 65 28 27 25 57 20 25 6a 27 2c  trftime('%W %j',
2530: 32 34 35 34 31 30 39 2e 30 34 31 34 30 39 37 35  2454109.04140975
2540: 29 7d 20 7b 30 32 20 30 30 38 7d 0a 64 61 74 65  )} {02 008}.date
2550: 74 65 73 74 20 33 2e 31 31 2e 32 31 20 7b 73 74  test 3.11.21 {st
2560: 72 66 74 69 6d 65 28 27 25 57 20 25 6a 27 2c 32  rftime('%W %j',2
2570: 34 35 34 31 30 39 2e 30 34 31 34 30 39 37 36 29  454109.04140976)
2580: 7d 20 7b 30 32 20 30 30 38 7d 0a 64 61 74 65 74  } {02 008}.datet
2590: 65 73 74 20 33 2e 31 31 2e 32 32 20 7b 73 74 72  est 3.11.22 {str
25a0: 66 74 69 6d 65 28 27 25 57 20 25 6a 27 2c 32 34  ftime('%W %j',24
25b0: 35 34 31 30 39 2e 30 34 31 34 30 39 37 37 29 7d  54109.04140977)}
25c0: 20 7b 30 32 20 30 30 38 7d 0a 64 61 74 65 74 65   {02 008}.datete
25d0: 73 74 20 33 2e 31 31 2e 32 33 20 7b 73 74 72 66  st 3.11.23 {strf
25e0: 74 69 6d 65 28 27 25 57 20 25 6a 27 2c 32 34 35  time('%W %j',245
25f0: 34 31 30 39 2e 30 34 31 34 30 39 37 38 29 7d 20  4109.04140978)} 
2600: 7b 30 32 20 30 30 38 7d 0a 64 61 74 65 74 65 73  {02 008}.datetes
2610: 74 20 33 2e 31 31 2e 32 34 20 7b 73 74 72 66 74  t 3.11.24 {strft
2620: 69 6d 65 28 27 25 57 20 25 6a 27 2c 32 34 35 34  ime('%W %j',2454
2630: 31 30 39 2e 30 34 31 34 30 39 37 39 29 7d 20 7b  109.04140979)} {
2640: 30 32 20 30 30 38 7d 0a 64 61 74 65 74 65 73 74  02 008}.datetest
2650: 20 33 2e 31 31 2e 32 35 20 7b 73 74 72 66 74 69   3.11.25 {strfti
2660: 6d 65 28 27 25 57 20 25 6a 27 2c 32 34 35 34 31  me('%W %j',24541
2670: 30 39 2e 30 34 31 34 30 39 38 30 29 7d 20 7b 30  09.04140980)} {0
2680: 32 20 30 30 38 7d 0a 64 61 74 65 74 65 73 74 20  2 008}.datetest 
2690: 33 2e 31 31 2e 39 39 20 7b 73 74 72 66 74 69 6d  3.11.99 {strftim
26a0: 65 28 27 25 57 20 25 6a 27 2c 27 32 34 35 34 31  e('%W %j','24541
26b0: 30 39 2e 30 34 31 34 30 39 37 30 27 29 7d 20 7b  09.04140970')} {
26c0: 30 32 20 30 30 38 7d 0a 64 61 74 65 74 65 73 74  02 008}.datetest
26d0: 20 33 2e 31 32 20 7b 73 74 72 66 74 69 6d 65 28   3.12 {strftime(
26e0: 27 25 59 27 2c 27 32 30 30 33 2d 31 30 2d 33 31  '%Y','2003-10-31
26f0: 20 31 32 3a 33 34 3a 35 36 2e 34 33 32 27 29 7d   12:34:56.432')}
2700: 20 32 30 30 33 0a 64 61 74 65 74 65 73 74 20 33   2003.datetest 3
2710: 2e 31 33 20 7b 73 74 72 66 74 69 6d 65 28 27 25  .13 {strftime('%
2720: 25 27 2c 27 32 30 30 33 2d 31 30 2d 33 31 20 31  %','2003-10-31 1
2730: 32 3a 33 34 3a 35 36 2e 34 33 32 27 29 7d 20 25  2:34:56.432')} %
2740: 0a 64 61 74 65 74 65 73 74 20 33 2e 31 34 20 7b  .datetest 3.14 {
2750: 73 74 72 66 74 69 6d 65 28 27 25 5f 27 2c 27 32  strftime('%_','2
2760: 30 30 33 2d 31 30 2d 33 31 20 31 32 3a 33 34 3a  003-10-31 12:34:
2770: 35 36 2e 34 33 32 27 29 7d 20 4e 55 4c 4c 0a 64  56.432')} NULL.d
2780: 61 74 65 74 65 73 74 20 33 2e 31 35 20 7b 73 74  atetest 3.15 {st
2790: 72 66 74 69 6d 65 28 27 25 59 2d 25 6d 2d 25 64  rftime('%Y-%m-%d
27a0: 27 2c 27 32 30 30 33 2d 31 30 2d 33 31 27 29 7d  ','2003-10-31')}
27b0: 20 32 30 30 33 2d 31 30 2d 33 31 0a 70 72 6f 63   2003-10-31.proc
27c0: 20 72 65 70 65 61 74 20 7b 6e 20 74 78 74 7d 20   repeat {n txt} 
27d0: 7b 0a 20 20 73 65 74 20 78 20 7b 7d 20 0a 20 20  {.  set x {} .  
27e0: 77 68 69 6c 65 20 7b 24 6e 3e 30 7d 20 7b 0a 20  while {$n>0} {. 
27f0: 20 20 20 61 70 70 65 6e 64 20 78 20 24 74 78 74     append x $txt
2800: 0a 20 20 20 20 69 6e 63 72 20 6e 20 2d 31 0a 20  .    incr n -1. 
2810: 20 7d 0a 20 20 72 65 74 75 72 6e 20 24 78 0a 7d   }.  return $x.}
2820: 0a 64 61 74 65 74 65 73 74 20 33 2e 31 36 20 22  .datetest 3.16 "
2830: 73 74 72 66 74 69 6d 65 28 27 5b 72 65 70 65 61  strftime('[repea
2840: 74 20 32 30 30 20 25 59 5d 27 2c 27 32 30 30 33  t 200 %Y]','2003
2850: 2d 31 30 2d 33 31 27 29 22 20 5b 72 65 70 65 61  -10-31')" [repea
2860: 74 20 32 30 30 20 32 30 30 33 5d 0a 64 61 74 65  t 200 2003].date
2870: 74 65 73 74 20 33 2e 31 37 20 22 73 74 72 66 74  test 3.17 "strft
2880: 69 6d 65 28 27 5b 72 65 70 65 61 74 20 32 30 30  ime('[repeat 200
2890: 20 61 62 63 25 6d 31 32 33 5d 27 2c 27 32 30 30   abc%m123]','200
28a0: 33 2d 31 30 2d 33 31 27 29 22 20 5c 0a 20 20 20  3-10-31')" \.   
28b0: 20 5b 72 65 70 65 61 74 20 32 30 30 20 61 62 63   [repeat 200 abc
28c0: 31 30 31 32 33 5d 0a 0a 66 6f 72 65 61 63 68 20  10123]..foreach 
28d0: 63 20 7b 61 20 62 20 63 20 65 20 67 20 68 20 69  c {a b c e g h i
28e0: 20 6b 20 6c 20 6e 20 6f 20 70 20 71 20 72 20 74   k l n o p q r t
28f0: 20 76 20 78 20 79 20 7a 0a 20 20 20 20 20 20 20   v x y z.       
2900: 20 20 20 20 41 20 42 20 43 20 44 20 45 20 46 20      A B C D E F 
2910: 47 20 49 20 4b 20 4c 20 4e 20 4f 20 50 20 51 20  G I K L N O P Q 
2920: 52 20 54 20 55 20 56 20 5a 0a 20 20 20 20 20 20  R T U V Z.      
2930: 20 20 20 20 20 30 20 31 20 32 20 33 20 34 20 35       0 1 2 3 4 5
2940: 20 36 20 36 20 37 20 39 20 5f 7d 20 7b 0a 20 20   6 6 7 9 _} {.  
2950: 64 61 74 65 74 65 73 74 20 33 2e 31 38 2e 24 63  datetest 3.18.$c
2960: 20 22 73 74 72 66 74 69 6d 65 28 27 25 24 63 27   "strftime('%$c'
2970: 2c 27 32 30 30 33 2d 31 30 2d 33 31 27 29 22 20  ,'2003-10-31')" 
2980: 4e 55 4c 4c 0a 7d 0a 0a 23 20 54 69 63 6b 65 74  NULL.}..# Ticket
2990: 20 23 32 32 37 36 2e 20 20 4d 61 6b 65 20 73 75   #2276.  Make su
29a0: 72 65 20 6c 65 61 64 69 6e 67 20 7a 65 72 6f 73  re leading zeros
29b0: 20 61 72 65 20 69 6e 73 65 72 74 65 64 20 77 68   are inserted wh
29c0: 65 72 65 20 61 70 70 72 6f 70 72 69 61 74 65 2e  ere appropriate.
29d0: 0a 23 0a 64 61 74 65 74 65 73 74 20 33 2e 32 30  .#.datetest 3.20
29e0: 20 5c 0a 20 20 20 7b 73 74 72 66 74 69 6d 65 28   \.   {strftime(
29f0: 27 25 64 2f 25 66 2f 25 48 2f 25 57 2f 25 6a 2f  '%d/%f/%H/%W/%j/
2a00: 25 6d 2f 25 4d 2f 25 53 2f 25 59 27 2c 27 30 34  %m/%M/%S/%Y','04
2a10: 32 31 2d 30 31 2d 30 32 20 30 33 3a 30 34 3a 30  21-01-02 03:04:0
2a20: 35 2e 30 30 36 27 29 7d 20 5c 0a 20 20 20 30 32  5.006')} \.   02
2a30: 2f 30 35 2e 30 30 36 2f 30 33 2f 30 30 2f 30 30  /05.006/03/00/00
2a40: 32 2f 30 31 2f 30 34 2f 30 35 2f 30 34 32 31 0a  2/01/04/05/0421.
2a50: 0a 73 65 74 20 73 71 6c 69 74 65 5f 63 75 72 72  .set sqlite_curr
2a60: 65 6e 74 5f 74 69 6d 65 20 31 31 35 37 31 32 34  ent_time 1157124
2a70: 33 36 37 0a 64 61 74 65 74 65 73 74 20 34 2e 31  367.datetest 4.1
2a80: 20 7b 64 61 74 65 28 27 6e 6f 77 27 29 7d 20 7b   {date('now')} {
2a90: 32 30 30 36 2d 30 39 2d 30 31 7d 0a 73 65 74 20  2006-09-01}.set 
2aa0: 73 71 6c 69 74 65 5f 63 75 72 72 65 6e 74 5f 74  sqlite_current_t
2ab0: 69 6d 65 20 30 0a 0a 64 61 74 65 74 65 73 74 20  ime 0..datetest 
2ac0: 35 2e 31 20 7b 64 61 74 65 74 69 6d 65 28 27 31  5.1 {datetime('1
2ad0: 39 39 34 2d 30 34 2d 31 36 20 31 34 3a 30 30 3a  994-04-16 14:00:
2ae0: 30 30 20 2b 30 35 3a 30 30 27 29 7d 20 7b 31 39  00 +05:00')} {19
2af0: 39 34 2d 30 34 2d 31 36 20 30 39 3a 30 30 3a 30  94-04-16 09:00:0
2b00: 30 7d 0a 64 61 74 65 74 65 73 74 20 35 2e 32 20  0}.datetest 5.2 
2b10: 7b 64 61 74 65 74 69 6d 65 28 27 31 39 39 34 2d  {datetime('1994-
2b20: 30 34 2d 31 36 20 31 34 3a 30 30 3a 30 30 20 2d  04-16 14:00:00 -
2b30: 30 35 3a 31 35 27 29 7d 20 7b 31 39 39 34 2d 30  05:15')} {1994-0
2b40: 34 2d 31 36 20 31 39 3a 31 35 3a 30 30 7d 0a 64  4-16 19:15:00}.d
2b50: 61 74 65 74 65 73 74 20 35 2e 33 20 7b 64 61 74  atetest 5.3 {dat
2b60: 65 74 69 6d 65 28 27 31 39 39 34 2d 30 34 2d 31  etime('1994-04-1
2b70: 36 20 30 35 3a 30 30 3a 30 30 20 2b 30 38 3a 33  6 05:00:00 +08:3
2b80: 30 27 29 7d 20 7b 31 39 39 34 2d 30 34 2d 31 35  0')} {1994-04-15
2b90: 20 32 30 3a 33 30 3a 30 30 7d 0a 64 61 74 65 74   20:30:00}.datet
2ba0: 65 73 74 20 35 2e 34 20 7b 64 61 74 65 74 69 6d  est 5.4 {datetim
2bb0: 65 28 27 31 39 39 34 2d 30 34 2d 31 36 20 31 34  e('1994-04-16 14
2bc0: 3a 30 30 3a 30 30 20 2d 31 31 3a 35 35 27 29 7d  :00:00 -11:55')}
2bd0: 20 7b 31 39 39 34 2d 30 34 2d 31 37 20 30 31 3a   {1994-04-17 01:
2be0: 35 35 3a 30 30 7d 0a 64 61 74 65 74 65 73 74 20  55:00}.datetest 
2bf0: 35 2e 35 20 7b 64 61 74 65 74 69 6d 65 28 27 31  5.5 {datetime('1
2c00: 39 39 34 2d 30 34 2d 31 36 20 31 34 3a 30 30 3a  994-04-16 14:00:
2c10: 30 30 20 2d 31 31 3a 36 30 27 29 7d 20 4e 55 4c  00 -11:60')} NUL
2c20: 4c 0a 64 61 74 65 74 65 73 74 20 35 2e 36 20 7b  L.datetest 5.6 {
2c30: 64 61 74 65 74 69 6d 65 28 27 31 39 39 34 2d 30  datetime('1994-0
2c40: 34 2d 31 36 20 31 34 3a 30 30 3a 30 30 20 2d 31  4-16 14:00:00 -1
2c50: 31 3a 35 35 20 20 27 29 7d 20 7b 31 39 39 34 2d  1:55  ')} {1994-
2c60: 30 34 2d 31 37 20 30 31 3a 35 35 3a 30 30 7d 0a  04-17 01:55:00}.
2c70: 64 61 74 65 74 65 73 74 20 35 2e 37 20 7b 64 61  datetest 5.7 {da
2c80: 74 65 74 69 6d 65 28 27 31 39 39 34 2d 30 34 2d  tetime('1994-04-
2c90: 31 36 20 31 34 3a 30 30 3a 30 30 20 2d 31 31 3a  16 14:00:00 -11:
2ca0: 35 35 20 78 27 29 7d 20 4e 55 4c 4c 0a 64 61 74  55 x')} NULL.dat
2cb0: 65 74 65 73 74 20 35 2e 38 20 7b 64 61 74 65 74  etest 5.8 {datet
2cc0: 69 6d 65 28 27 31 39 39 34 2d 30 34 2d 31 36 54  ime('1994-04-16T
2cd0: 31 34 3a 30 30 3a 30 30 5a 27 29 7d 20 7b 31 39  14:00:00Z')} {19
2ce0: 39 34 2d 30 34 2d 31 36 20 31 34 3a 30 30 3a 30  94-04-16 14:00:0
2cf0: 30 7d 0a 64 61 74 65 74 65 73 74 20 35 2e 39 20  0}.datetest 5.9 
2d00: 7b 64 61 74 65 74 69 6d 65 28 27 31 39 39 34 2d  {datetime('1994-
2d10: 30 34 2d 31 36 20 31 34 3a 30 30 3a 30 30 7a 27  04-16 14:00:00z'
2d20: 29 7d 20 7b 31 39 39 34 2d 30 34 2d 31 36 20 31  )} {1994-04-16 1
2d30: 34 3a 30 30 3a 30 30 7d 0a 64 61 74 65 74 65 73  4:00:00}.datetes
2d40: 74 20 35 2e 31 30 20 7b 64 61 74 65 74 69 6d 65  t 5.10 {datetime
2d50: 28 27 31 39 39 34 2d 30 34 2d 31 36 20 31 34 3a  ('1994-04-16 14:
2d60: 30 30 3a 30 30 20 5a 27 29 7d 20 7b 31 39 39 34  00:00 Z')} {1994
2d70: 2d 30 34 2d 31 36 20 31 34 3a 30 30 3a 30 30 7d  -04-16 14:00:00}
2d80: 0a 64 61 74 65 74 65 73 74 20 35 2e 31 31 20 7b  .datetest 5.11 {
2d90: 64 61 74 65 74 69 6d 65 28 27 31 39 39 34 2d 30  datetime('1994-0
2da0: 34 2d 31 36 20 31 34 3a 30 30 3a 30 30 7a 20 20  4-16 14:00:00z  
2db0: 20 20 27 29 7d 20 7b 31 39 39 34 2d 30 34 2d 31    ')} {1994-04-1
2dc0: 36 20 31 34 3a 30 30 3a 30 30 7d 0a 64 61 74 65  6 14:00:00}.date
2dd0: 74 65 73 74 20 35 2e 31 32 20 7b 64 61 74 65 74  test 5.12 {datet
2de0: 69 6d 65 28 27 31 39 39 34 2d 30 34 2d 31 36 20  ime('1994-04-16 
2df0: 31 34 3a 30 30 3a 30 30 20 20 20 20 20 7a 20 20  14:00:00     z  
2e00: 20 20 27 29 7d 20 7b 31 39 39 34 2d 30 34 2d 31    ')} {1994-04-1
2e10: 36 20 31 34 3a 30 30 3a 30 30 7d 0a 64 61 74 65  6 14:00:00}.date
2e20: 74 65 73 74 20 35 2e 31 33 20 7b 64 61 74 65 74  test 5.13 {datet
2e30: 69 6d 65 28 27 31 39 39 34 2d 30 34 2d 31 36 20  ime('1994-04-16 
2e40: 31 34 3a 30 30 3a 30 30 5a 75 6c 75 27 29 7d 20  14:00:00Zulu')} 
2e50: 4e 55 4c 4c 0a 64 61 74 65 74 65 73 74 20 35 2e  NULL.datetest 5.
2e60: 31 34 20 7b 64 61 74 65 74 69 6d 65 28 27 31 39  14 {datetime('19
2e70: 39 34 2d 30 34 2d 31 36 20 31 34 3a 30 30 3a 30  94-04-16 14:00:0
2e80: 30 5a 20 2b 30 35 3a 30 30 27 29 7d 20 4e 55 4c  0Z +05:00')} NUL
2e90: 4c 0a 64 61 74 65 74 65 73 74 20 35 2e 31 35 20  L.datetest 5.15 
2ea0: 7b 64 61 74 65 74 69 6d 65 28 27 31 39 39 34 2d  {datetime('1994-
2eb0: 30 34 2d 31 36 20 31 34 3a 30 30 3a 30 30 20 2b  04-16 14:00:00 +
2ec0: 30 35 3a 30 30 20 5a 27 29 7d 20 4e 55 4c 4c 0a  05:00 Z')} NULL.
2ed0: 0a 23 20 6c 6f 63 61 6c 74 69 6d 65 2d 3e 75 74  .# localtime->ut
2ee0: 63 20 61 6e 64 20 75 74 63 2d 3e 6c 6f 63 61 6c  c and utc->local
2ef0: 74 69 6d 65 20 63 6f 6e 76 65 72 73 69 6f 6e 73  time conversions
2f00: 2e 20 20 54 68 65 73 65 20 74 65 73 74 73 20 6f  .  These tests o
2f10: 6e 6c 79 20 77 6f 72 6b 0a 23 20 69 66 20 74 68  nly work.# if th
2f20: 65 20 6c 6f 63 61 6c 74 69 6d 65 20 69 73 20 69  e localtime is i
2f30: 6e 20 74 68 65 20 55 53 20 45 61 73 74 65 72 6e  n the US Eastern
2f40: 20 54 69 6d 65 20 28 74 68 65 20 74 69 6d 65 20   Time (the time 
2f50: 69 6e 20 43 68 61 72 6c 6f 74 74 65 2c 20 4e 43  in Charlotte, NC
2f60: 0a 23 20 61 6e 64 20 69 6e 20 4e 65 77 20 59 6f  .# and in New Yo
2f70: 72 6b 2e 29 0a 23 0a 23 20 4f 6e 20 6e 6f 6e 2d  rk.).#.# On non-
2f80: 56 69 73 74 61 20 57 69 6e 64 6f 77 73 20 70 6c  Vista Windows pl
2f90: 61 74 66 6f 72 6d 2c 20 27 32 30 30 36 2d 30 33  atform, '2006-03
2fa0: 2d 33 31 27 20 69 73 20 74 72 65 61 74 65 64 20  -31' is treated 
2fb0: 69 6e 63 6f 72 72 65 63 74 6c 79 20 61 73 20 62  incorrectly as b
2fc0: 65 69 6e 67 0a 23 20 69 6e 20 44 53 54 20 67 69  eing.# in DST gi
2fd0: 76 69 6e 67 20 61 20 34 20 68 6f 75 72 20 6f 66  ving a 4 hour of
2fe0: 66 73 65 74 20 69 6e 73 74 65 61 64 20 6f 66 20  fset instead of 
2ff0: 35 2e 20 20 49 6e 20 32 30 30 37 2c 20 44 53 54  5.  In 2007, DST
3000: 20 77 61 73 20 65 78 74 65 6e 64 65 64 20 74 6f   was extended to
3010: 20 0a 23 20 73 74 61 72 74 20 74 68 72 65 65 20   .# start three 
3020: 77 65 65 6b 73 20 65 61 72 6c 69 65 72 20 28 73  weeks earlier (s
3030: 65 63 6f 6e 64 20 53 75 6e 64 61 79 20 69 6e 20  econd Sunday in 
3040: 4d 61 72 63 68 29 20 61 6e 64 20 65 6e 64 20 6f  March) and end o
3050: 6e 65 20 77 65 65 6b 0a 23 20 6c 61 74 65 72 20  ne week.# later 
3060: 28 66 69 72 73 74 20 53 75 6e 64 61 79 20 69 6e  (first Sunday in
3070: 20 4e 6f 76 65 6d 62 65 72 29 2e 20 20 4f 6c 64   November).  Old
3080: 65 72 20 57 69 6e 64 6f 77 73 20 73 79 73 74 65  er Windows syste
3090: 6d 73 20 61 70 70 6c 79 20 74 68 69 73 0a 23 20  ms apply this.# 
30a0: 6e 65 77 20 72 75 6c 65 20 69 6e 63 6f 72 72 65  new rule incorre
30b0: 63 74 6c 79 20 74 6f 20 64 61 74 65 73 20 70 72  ctly to dates pr
30c0: 69 6f 72 20 74 6f 20 32 30 30 37 2e 0a 23 0a 23  ior to 2007..#.#
30d0: 20 49 74 20 6d 69 67 68 74 20 62 65 20 61 72 67   It might be arg
30e0: 75 65 64 20 74 68 61 74 20 74 68 69 73 20 69 73  ued that this is
30f0: 20 6d 61 73 6b 69 6e 67 20 61 20 70 72 6f 62 6c   masking a probl
3100: 65 6d 20 6f 6e 20 6e 6f 6e 2d 56 69 73 74 61 20  em on non-Vista 
3110: 57 69 6e 64 6f 77 73 0a 23 20 70 6c 61 74 66 6f  Windows.# platfo
3120: 72 6d 2e 20 20 41 20 74 69 63 6b 65 74 20 68 61  rm.  A ticket ha
3130: 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 6f  s already been o
3140: 70 65 6e 65 64 20 66 6f 72 20 74 68 69 73 20 69  pened for this i
3150: 73 73 75 65 20 0a 23 20 28 68 74 74 70 3a 2f 2f  ssue .# (http://
3160: 77 77 77 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 63  www.sqlite.org/c
3170: 76 73 74 72 61 63 2f 74 6b 74 76 69 65 77 3f 74  vstrac/tktview?t
3180: 6e 3d 32 33 32 32 29 2e 20 20 54 68 69 73 20 69  n=2322).  This i
3190: 73 20 6a 75 73 74 20 74 6f 20 70 72 65 76 65 6e  s just to preven
31a0: 74 0a 23 20 6d 6f 72 65 20 63 6f 6e 66 75 73 69  t.# more confusi
31b0: 6f 6e 2f 72 65 70 6f 72 74 73 20 6f 66 20 74 68  on/reports of th
31c0: 65 20 69 73 73 75 65 2e 0a 23 0a 0a 23 20 24 74  e issue..#..# $t
31d0: 7a 6f 66 66 73 65 74 5f 6f 6c 64 20 73 68 6f 75  zoffset_old shou
31e0: 6c 64 20 62 65 20 35 20 69 66 20 44 53 54 20 69  ld be 5 if DST i
31f0: 73 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  s working correc
3200: 74 6c 79 2e 0a 73 65 74 20 74 7a 6f 66 66 73 65  tly..set tzoffse
3210: 74 5f 6f 6c 64 20 5b 64 62 20 6f 6e 65 20 7b 0a  t_old [db one {.
3220: 20 20 53 45 4c 45 43 54 20 43 41 53 54 28 32 34    SELECT CAST(24
3230: 2a 28 6a 75 6c 69 61 6e 64 61 79 28 27 32 30 30  *(julianday('200
3240: 36 2d 30 33 2d 33 31 27 29 20 2d 0a 20 20 20 20  6-03-31') -.    
3250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6a 75                ju
3260: 6c 69 61 6e 64 61 79 28 27 32 30 30 36 2d 30 33  lianday('2006-03
3270: 2d 33 31 27 2c 27 6c 6f 63 61 6c 74 69 6d 65 27  -31','localtime'
3280: 29 29 2b 30 2e 35 0a 20 20 20 20 20 20 20 20 20  ))+0.5.         
3290: 20 20 20 20 20 41 53 20 49 4e 54 29 0a 7d 5d 0a       AS INT).}].
32a0: 0a 23 20 24 74 7a 6f 66 66 73 65 74 5f 6e 65 77  .# $tzoffset_new
32b0: 20 73 68 6f 75 6c 64 20 62 65 20 34 20 69 66 20   should be 4 if 
32c0: 44 53 54 20 69 73 20 77 6f 72 6b 69 6e 67 20 63  DST is working c
32d0: 6f 72 72 65 63 74 6c 79 2e 0a 73 65 74 20 74 7a  orrectly..set tz
32e0: 6f 66 66 73 65 74 5f 6e 65 77 20 5b 64 62 20 6f  offset_new [db o
32f0: 6e 65 20 7b 0a 20 20 53 45 4c 45 43 54 20 43 41  ne {.  SELECT CA
3300: 53 54 28 32 34 2a 28 6a 75 6c 69 61 6e 64 61 79  ST(24*(julianday
3310: 28 27 32 30 30 37 2d 30 33 2d 33 31 27 29 20 2d  ('2007-03-31') -
3320: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3330: 20 20 20 6a 75 6c 69 61 6e 64 61 79 28 27 32 30     julianday('20
3340: 30 37 2d 30 33 2d 33 31 27 2c 27 6c 6f 63 61 6c  07-03-31','local
3350: 74 69 6d 65 27 29 29 2b 30 2e 35 0a 20 20 20 20  time'))+0.5.    
3360: 20 20 20 20 20 20 20 20 20 20 41 53 20 49 4e 54            AS INT
3370: 29 0a 7d 5d 0a 0a 23 20 57 61 72 6e 20 61 62 6f  ).}]..# Warn abo
3380: 75 74 20 70 6f 73 73 69 62 6c 79 20 62 72 6f 6b  ut possibly brok
3390: 65 6e 20 57 69 6e 64 6f 77 73 20 44 53 54 20 69  en Windows DST i
33a0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 2e 0a  mplementations..
33b0: 69 66 20 7b 24 3a 3a 74 63 6c 5f 70 6c 61 74 66  if {$::tcl_platf
33c0: 6f 72 6d 28 70 6c 61 74 66 6f 72 6d 29 3d 3d 22  orm(platform)=="
33d0: 77 69 6e 64 6f 77 73 22 20 26 26 20 24 74 7a 6f  windows" && $tzo
33e0: 66 66 73 65 74 5f 6e 65 77 3d 3d 34 20 26 26 20  ffset_new==4 && 
33f0: 24 74 7a 6f 66 66 73 65 74 5f 6f 6c 64 3d 3d 34  $tzoffset_old==4
3400: 7d 20 7b 0a 20 20 70 75 74 73 20 22 2a 2a 2a 2a  } {.  puts "****
3410: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3420: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3430: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3440: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 22 0a  **************".
3450: 20 20 70 75 74 73 20 22 4e 2e 42 2e 3a 20 20 54    puts "N.B.:  T
3460: 68 65 20 44 53 54 20 73 75 70 70 6f 72 74 20 70  he DST support p
3470: 72 6f 76 69 64 65 64 20 62 79 20 79 6f 75 72 20  rovided by your 
3480: 63 75 72 72 65 6e 74 20 4f 2f 53 20 73 65 65 6d  current O/S seem
3490: 73 20 74 6f 20 62 65 22 0a 20 20 70 75 74 73 20  s to be".  puts 
34a0: 22 73 75 73 70 65 63 74 20 69 6e 20 74 68 61 74  "suspect in that
34b0: 20 69 74 20 69 73 20 72 65 70 6f 72 74 69 6e 67   it is reporting
34c0: 20 69 6e 63 6f 72 72 65 63 74 20 44 53 54 20 76   incorrect DST v
34d0: 61 6c 75 65 73 20 66 6f 72 20 64 61 74 65 73 22  alues for dates"
34e0: 0a 20 20 70 75 74 73 20 22 70 72 69 6f 72 20 74  .  puts "prior t
34f0: 6f 20 32 30 30 37 2e 20 20 54 68 69 73 20 69 73  o 2007.  This is
3500: 20 74 68 65 20 6b 6e 6f 77 6e 20 63 61 73 65 20   the known case 
3510: 66 6f 72 20 6d 6f 73 74 20 28 61 6c 6c 3f 29 20  for most (all?) 
3520: 6e 6f 6e 2d 56 69 73 74 61 22 0a 20 20 70 75 74  non-Vista".  put
3530: 73 20 22 57 69 6e 64 6f 77 73 20 76 65 72 73 69  s "Windows versi
3540: 6f 6e 73 2e 20 20 50 6c 65 61 73 65 20 73 65 65  ons.  Please see
3550: 20 74 69 63 6b 65 74 20 23 32 33 32 32 20 66 6f   ticket #2322 fo
3560: 72 20 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69  r more informati
3570: 6f 6e 2e 22 0a 20 20 70 75 74 73 20 22 2a 2a 2a  on.".  puts "***
3580: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3590: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
35a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
35b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 22  ***************"
35c0: 0a 7d 0a 0a 69 66 20 7b 24 74 7a 6f 66 66 73 65  .}..if {$tzoffse
35d0: 74 5f 6e 65 77 3d 3d 34 7d 20 7b 0a 20 20 64 61  t_new==4} {.  da
35e0: 74 65 74 65 73 74 20 36 2e 31 20 7b 64 61 74 65  tetest 6.1 {date
35f0: 74 69 6d 65 28 27 32 30 30 30 2d 31 30 2d 32 39  time('2000-10-29
3600: 20 30 35 3a 35 39 3a 30 30 27 2c 27 6c 6f 63 61   05:59:00','loca
3610: 6c 74 69 6d 65 27 29 7d 5c 0a 20 20 20 20 20 20  ltime')}\.      
3620: 7b 32 30 30 30 2d 31 30 2d 32 39 20 30 31 3a 35  {2000-10-29 01:5
3630: 39 3a 30 30 7d 0a 20 20 64 61 74 65 74 65 73 74  9:00}.  datetest
3640: 20 36 2e 31 2e 31 20 7b 64 61 74 65 74 69 6d 65   6.1.1 {datetime
3650: 28 27 32 30 30 36 2d 31 30 2d 32 39 20 30 35 3a  ('2006-10-29 05:
3660: 35 39 3a 30 30 27 2c 27 6c 6f 63 61 6c 74 69 6d  59:00','localtim
3670: 65 27 29 7d 5c 0a 20 20 20 20 20 20 7b 32 30 30  e')}\.      {200
3680: 36 2d 31 30 2d 32 39 20 30 31 3a 35 39 3a 30 30  6-10-29 01:59:00
3690: 7d 0a 20 20 64 61 74 65 74 65 73 74 20 36 2e 31  }.  datetest 6.1
36a0: 2e 32 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30  .2 {datetime('20
36b0: 30 37 2d 31 31 2d 30 34 20 30 35 3a 35 39 3a 30  07-11-04 05:59:0
36c0: 30 27 2c 27 6c 6f 63 61 6c 74 69 6d 65 27 29 7d  0','localtime')}
36d0: 5c 0a 20 20 20 20 20 20 7b 32 30 30 37 2d 31 31  \.      {2007-11
36e0: 2d 30 34 20 30 31 3a 35 39 3a 30 30 7d 0a 0a 20  -04 01:59:00}.. 
36f0: 20 23 20 49 66 20 74 68 65 20 6e 65 77 20 61 6e   # If the new an
3700: 64 20 6f 6c 64 20 44 53 54 20 72 75 6c 65 73 20  d old DST rules 
3710: 73 65 65 6d 20 74 6f 20 62 65 20 77 6f 72 6b 69  seem to be worki
3720: 6e 67 20 63 6f 72 72 65 63 74 6c 79 2e 2e 2e 0a  ng correctly....
3730: 20 20 69 66 20 7b 24 74 7a 6f 66 66 73 65 74 5f    if {$tzoffset_
3740: 6e 65 77 3d 3d 34 20 26 26 20 24 74 7a 6f 66 66  new==4 && $tzoff
3750: 73 65 74 5f 6f 6c 64 3d 3d 35 7d 20 7b 0a 20 20  set_old==5} {.  
3760: 20 20 64 61 74 65 74 65 73 74 20 36 2e 32 20 7b    datetest 6.2 {
3770: 64 61 74 65 74 69 6d 65 28 27 32 30 30 30 2d 31  datetime('2000-1
3780: 30 2d 32 39 20 30 36 3a 30 30 3a 30 30 27 2c 27  0-29 06:00:00','
3790: 6c 6f 63 61 6c 74 69 6d 65 27 29 7d 5c 0a 20 20  localtime')}\.  
37a0: 20 20 20 20 20 20 7b 32 30 30 30 2d 31 30 2d 32        {2000-10-2
37b0: 39 20 30 31 3a 30 30 3a 30 30 7d 0a 20 20 20 20  9 01:00:00}.    
37c0: 64 61 74 65 74 65 73 74 20 36 2e 32 2e 31 20 7b  datetest 6.2.1 {
37d0: 64 61 74 65 74 69 6d 65 28 27 32 30 30 36 2d 31  datetime('2006-1
37e0: 30 2d 32 39 20 30 36 3a 30 30 3a 30 30 27 2c 27  0-29 06:00:00','
37f0: 6c 6f 63 61 6c 74 69 6d 65 27 29 7d 5c 0a 20 20  localtime')}\.  
3800: 20 20 20 20 20 20 7b 32 30 30 36 2d 31 30 2d 32        {2006-10-2
3810: 39 20 30 31 3a 30 30 3a 30 30 7d 0a 20 20 7d 0a  9 01:00:00}.  }.
3820: 20 20 64 61 74 65 74 65 73 74 20 36 2e 32 2e 32    datetest 6.2.2
3830: 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30 37   {datetime('2007
3840: 2d 31 31 2d 30 34 20 30 36 3a 30 30 3a 30 30 27  -11-04 06:00:00'
3850: 2c 27 6c 6f 63 61 6c 74 69 6d 65 27 29 7d 5c 0a  ,'localtime')}\.
3860: 20 20 20 20 20 20 7b 32 30 30 37 2d 31 31 2d 30        {2007-11-0
3870: 34 20 30 31 3a 30 30 3a 30 30 7d 0a 0a 20 20 23  4 01:00:00}..  #
3880: 20 49 66 20 74 68 65 20 6e 65 77 20 61 6e 64 20   If the new and 
3890: 6f 6c 64 20 44 53 54 20 72 75 6c 65 73 20 73 65  old DST rules se
38a0: 65 6d 20 74 6f 20 62 65 20 77 6f 72 6b 69 6e 67  em to be working
38b0: 20 63 6f 72 72 65 63 74 6c 79 2e 2e 2e 0a 20 20   correctly....  
38c0: 69 66 20 7b 24 74 7a 6f 66 66 73 65 74 5f 6e 65  if {$tzoffset_ne
38d0: 77 3d 3d 34 20 26 26 20 24 74 7a 6f 66 66 73 65  w==4 && $tzoffse
38e0: 74 5f 6f 6c 64 3d 3d 35 7d 20 7b 0a 20 20 20 20  t_old==5} {.    
38f0: 64 61 74 65 74 65 73 74 20 36 2e 33 20 7b 64 61  datetest 6.3 {da
3900: 74 65 74 69 6d 65 28 27 32 30 30 30 2d 30 34 2d  tetime('2000-04-
3910: 30 32 20 30 36 3a 35 39 3a 30 30 27 2c 27 6c 6f  02 06:59:00','lo
3920: 63 61 6c 74 69 6d 65 27 29 7d 5c 0a 20 20 20 20  caltime')}\.    
3930: 20 20 20 20 7b 32 30 30 30 2d 30 34 2d 30 32 20      {2000-04-02 
3940: 30 31 3a 35 39 3a 30 30 7d 0a 20 20 20 20 64 61  01:59:00}.    da
3950: 74 65 74 65 73 74 20 36 2e 33 2e 31 20 7b 64 61  tetest 6.3.1 {da
3960: 74 65 74 69 6d 65 28 27 32 30 30 36 2d 30 34 2d  tetime('2006-04-
3970: 30 32 20 30 36 3a 35 39 3a 30 30 27 2c 27 6c 6f  02 06:59:00','lo
3980: 63 61 6c 74 69 6d 65 27 29 7d 5c 0a 20 20 20 20  caltime')}\.    
3990: 20 20 20 20 7b 32 30 30 36 2d 30 34 2d 30 32 20      {2006-04-02 
39a0: 30 31 3a 35 39 3a 30 30 7d 0a 20 20 7d 0a 20 20  01:59:00}.  }.  
39b0: 64 61 74 65 74 65 73 74 20 36 2e 33 2e 32 20 7b  datetest 6.3.2 {
39c0: 64 61 74 65 74 69 6d 65 28 27 32 30 30 37 2d 30  datetime('2007-0
39d0: 33 2d 31 31 20 30 37 3a 30 30 3a 30 30 27 2c 27  3-11 07:00:00','
39e0: 6c 6f 63 61 6c 74 69 6d 65 27 29 7d 5c 0a 20 20  localtime')}\.  
39f0: 20 20 20 20 7b 32 30 30 37 2d 30 33 2d 31 31 20      {2007-03-11 
3a00: 30 33 3a 30 30 3a 30 30 7d 0a 0a 20 20 64 61 74  03:00:00}..  dat
3a10: 65 74 65 73 74 20 36 2e 34 20 7b 64 61 74 65 74  etest 6.4 {datet
3a20: 69 6d 65 28 27 32 30 30 30 2d 30 34 2d 30 32 20  ime('2000-04-02 
3a30: 30 37 3a 30 30 3a 30 30 27 2c 27 6c 6f 63 61 6c  07:00:00','local
3a40: 74 69 6d 65 27 29 7d 5c 0a 20 20 20 20 20 20 7b  time')}\.      {
3a50: 32 30 30 30 2d 30 34 2d 30 32 20 30 33 3a 30 30  2000-04-02 03:00
3a60: 3a 30 30 7d 0a 20 20 64 61 74 65 74 65 73 74 20  :00}.  datetest 
3a70: 36 2e 34 2e 31 20 7b 64 61 74 65 74 69 6d 65 28  6.4.1 {datetime(
3a80: 27 32 30 30 36 2d 30 34 2d 30 32 20 30 37 3a 30  '2006-04-02 07:0
3a90: 30 3a 30 30 27 2c 27 6c 6f 63 61 6c 74 69 6d 65  0:00','localtime
3aa0: 27 29 7d 5c 0a 20 20 20 20 20 20 7b 32 30 30 36  ')}\.      {2006
3ab0: 2d 30 34 2d 30 32 20 30 33 3a 30 30 3a 30 30 7d  -04-02 03:00:00}
3ac0: 0a 20 20 64 61 74 65 74 65 73 74 20 36 2e 34 2e  .  datetest 6.4.
3ad0: 32 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30  2 {datetime('200
3ae0: 37 2d 30 33 2d 31 31 20 30 37 3a 30 30 3a 30 30  7-03-11 07:00:00
3af0: 27 2c 27 6c 6f 63 61 6c 74 69 6d 65 27 29 7d 5c  ','localtime')}\
3b00: 0a 20 20 20 20 20 20 7b 32 30 30 37 2d 30 33 2d  .      {2007-03-
3b10: 31 31 20 30 33 3a 30 30 3a 30 30 7d 0a 20 20 20  11 03:00:00}.   
3b20: 20 20 20 0a 20 20 64 61 74 65 74 65 73 74 20 36     .  datetest 6
3b30: 2e 35 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30  .5 {datetime('20
3b40: 30 30 2d 31 30 2d 32 39 20 30 31 3a 35 39 3a 30  00-10-29 01:59:0
3b50: 30 27 2c 27 75 74 63 27 29 7d 20 7b 32 30 30 30  0','utc')} {2000
3b60: 2d 31 30 2d 32 39 20 30 35 3a 35 39 3a 30 30 7d  -10-29 05:59:00}
3b70: 0a 20 20 64 61 74 65 74 65 73 74 20 36 2e 35 2e  .  datetest 6.5.
3b80: 31 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30  1 {datetime('200
3b90: 36 2d 31 30 2d 32 39 20 30 31 3a 35 39 3a 30 30  6-10-29 01:59:00
3ba0: 27 2c 27 75 74 63 27 29 7d 20 7b 32 30 30 36 2d  ','utc')} {2006-
3bb0: 31 30 2d 32 39 20 30 35 3a 35 39 3a 30 30 7d 0a  10-29 05:59:00}.
3bc0: 20 20 64 61 74 65 74 65 73 74 20 36 2e 35 2e 32    datetest 6.5.2
3bd0: 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30 37   {datetime('2007
3be0: 2d 31 31 2d 30 34 20 30 31 3a 35 39 3a 30 30 27  -11-04 01:59:00'
3bf0: 2c 27 75 74 63 27 29 7d 20 7b 32 30 30 37 2d 31  ,'utc')} {2007-1
3c00: 31 2d 30 34 20 30 35 3a 35 39 3a 30 30 7d 0a 0a  1-04 05:59:00}..
3c10: 20 20 23 20 49 66 20 74 68 65 20 6e 65 77 20 61    # If the new a
3c20: 6e 64 20 6f 6c 64 20 44 53 54 20 72 75 6c 65 73  nd old DST rules
3c30: 20 73 65 65 6d 20 74 6f 20 62 65 20 77 6f 72 6b   seem to be work
3c40: 69 6e 67 20 63 6f 72 72 65 63 74 6c 79 2e 2e 2e  ing correctly...
3c50: 0a 20 20 69 66 20 7b 24 74 7a 6f 66 66 73 65 74  .  if {$tzoffset
3c60: 5f 6e 65 77 3d 3d 34 20 26 26 20 24 74 7a 6f 66  _new==4 && $tzof
3c70: 66 73 65 74 5f 6f 6c 64 3d 3d 35 7d 20 7b 0a 20  fset_old==5} {. 
3c80: 20 20 20 64 61 74 65 74 65 73 74 20 36 2e 36 20     datetest 6.6 
3c90: 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30 30 2d  {datetime('2000-
3ca0: 31 30 2d 32 39 20 30 32 3a 30 30 3a 30 30 27 2c  10-29 02:00:00',
3cb0: 27 75 74 63 27 29 7d 20 7b 32 30 30 30 2d 31 30  'utc')} {2000-10
3cc0: 2d 32 39 20 30 37 3a 30 30 3a 30 30 7d 0a 20 20  -29 07:00:00}.  
3cd0: 20 20 64 61 74 65 74 65 73 74 20 36 2e 36 2e 31    datetest 6.6.1
3ce0: 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30 36   {datetime('2006
3cf0: 2d 31 30 2d 32 39 20 30 32 3a 30 30 3a 30 30 27  -10-29 02:00:00'
3d00: 2c 27 75 74 63 27 29 7d 20 7b 32 30 30 36 2d 31  ,'utc')} {2006-1
3d10: 30 2d 32 39 20 30 37 3a 30 30 3a 30 30 7d 0a 20  0-29 07:00:00}. 
3d20: 20 7d 0a 20 20 64 61 74 65 74 65 73 74 20 36 2e   }.  datetest 6.
3d30: 36 2e 32 20 7b 64 61 74 65 74 69 6d 65 28 27 32  6.2 {datetime('2
3d40: 30 30 37 2d 31 31 2d 30 34 20 30 32 3a 30 30 3a  007-11-04 02:00:
3d50: 30 30 27 2c 27 75 74 63 27 29 7d 20 7b 32 30 30  00','utc')} {200
3d60: 37 2d 31 31 2d 30 34 20 30 37 3a 30 30 3a 30 30  7-11-04 07:00:00
3d70: 7d 0a 0a 20 20 23 20 49 66 20 74 68 65 20 6e 65  }..  # If the ne
3d80: 77 20 61 6e 64 20 6f 6c 64 20 44 53 54 20 72 75  w and old DST ru
3d90: 6c 65 73 20 73 65 65 6d 20 74 6f 20 62 65 20 77  les seem to be w
3da0: 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c 79  orking correctly
3db0: 2e 2e 2e 0a 20 20 69 66 20 7b 24 74 7a 6f 66 66  ....  if {$tzoff
3dc0: 73 65 74 5f 6e 65 77 3d 3d 34 20 26 26 20 24 74  set_new==4 && $t
3dd0: 7a 6f 66 66 73 65 74 5f 6f 6c 64 3d 3d 35 7d 20  zoffset_old==5} 
3de0: 7b 0a 20 20 20 20 64 61 74 65 74 65 73 74 20 36  {.    datetest 6
3df0: 2e 37 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30  .7 {datetime('20
3e00: 30 30 2d 30 34 2d 30 32 20 30 31 3a 35 39 3a 30  00-04-02 01:59:0
3e10: 30 27 2c 27 75 74 63 27 29 7d 20 7b 32 30 30 30  0','utc')} {2000
3e20: 2d 30 34 2d 30 32 20 30 36 3a 35 39 3a 30 30 7d  -04-02 06:59:00}
3e30: 0a 20 20 20 20 64 61 74 65 74 65 73 74 20 36 2e  .    datetest 6.
3e40: 37 2e 31 20 7b 64 61 74 65 74 69 6d 65 28 27 32  7.1 {datetime('2
3e50: 30 30 36 2d 30 34 2d 30 32 20 30 31 3a 35 39 3a  006-04-02 01:59:
3e60: 30 30 27 2c 27 75 74 63 27 29 7d 20 7b 32 30 30  00','utc')} {200
3e70: 36 2d 30 34 2d 30 32 20 30 36 3a 35 39 3a 30 30  6-04-02 06:59:00
3e80: 7d 0a 20 20 7d 0a 20 20 64 61 74 65 74 65 73 74  }.  }.  datetest
3e90: 20 36 2e 37 2e 32 20 7b 64 61 74 65 74 69 6d 65   6.7.2 {datetime
3ea0: 28 27 32 30 30 37 2d 30 33 2d 31 31 20 30 31 3a  ('2007-03-11 01:
3eb0: 35 39 3a 30 30 27 2c 27 75 74 63 27 29 7d 20 7b  59:00','utc')} {
3ec0: 32 30 30 37 2d 30 33 2d 31 31 20 30 36 3a 35 39  2007-03-11 06:59
3ed0: 3a 30 30 7d 0a 0a 20 20 64 61 74 65 74 65 73 74  :00}..  datetest
3ee0: 20 36 2e 38 20 7b 64 61 74 65 74 69 6d 65 28 27   6.8 {datetime('
3ef0: 32 30 30 30 2d 30 34 2d 30 32 20 30 32 3a 30 30  2000-04-02 02:00
3f00: 3a 30 30 27 2c 27 75 74 63 27 29 7d 20 7b 32 30  :00','utc')} {20
3f10: 30 30 2d 30 34 2d 30 32 20 30 36 3a 30 30 3a 30  00-04-02 06:00:0
3f20: 30 7d 0a 20 20 64 61 74 65 74 65 73 74 20 36 2e  0}.  datetest 6.
3f30: 38 2e 31 20 7b 64 61 74 65 74 69 6d 65 28 27 32  8.1 {datetime('2
3f40: 30 30 36 2d 30 34 2d 30 32 20 30 32 3a 30 30 3a  006-04-02 02:00:
3f50: 30 30 27 2c 27 75 74 63 27 29 7d 20 7b 32 30 30  00','utc')} {200
3f60: 36 2d 30 34 2d 30 32 20 30 36 3a 30 30 3a 30 30  6-04-02 06:00:00
3f70: 7d 0a 20 20 64 61 74 65 74 65 73 74 20 36 2e 38  }.  datetest 6.8
3f80: 2e 32 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30  .2 {datetime('20
3f90: 30 37 2d 30 33 2d 31 31 20 30 32 3a 30 30 3a 30  07-03-11 02:00:0
3fa0: 30 27 2c 27 75 74 63 27 29 7d 20 7b 32 30 30 37  0','utc')} {2007
3fb0: 2d 30 33 2d 31 31 20 30 36 3a 30 30 3a 30 30 7d  -03-11 06:00:00}
3fc0: 0a 0a 20 20 23 20 54 68 65 20 27 75 74 63 27 20  ..  # The 'utc' 
3fd0: 6d 6f 64 69 66 69 65 72 20 69 73 20 61 20 6e 6f  modifier is a no
3fe0: 2d 6f 70 20 69 66 20 74 68 65 20 4c 48 53 20 69  -op if the LHS i
3ff0: 73 20 6b 6e 6f 77 6e 20 74 6f 20 61 6c 72 65 61  s known to alrea
4000: 64 79 20 62 65 20 69 6e 20 55 54 43 0a 20 20 64  dy be in UTC.  d
4010: 61 74 65 74 65 73 74 20 36 2e 39 2e 31 20 7b 64  atetest 6.9.1 {d
4020: 61 74 65 74 69 6d 65 28 27 32 30 31 35 2d 31 32  atetime('2015-12
4030: 2d 32 33 20 31 32 3a 30 30 3a 30 30 27 2c 27 75  -23 12:00:00','u
4040: 74 63 27 29 7d 20 7b 32 30 31 35 2d 31 32 2d 32  tc')} {2015-12-2
4050: 33 20 31 37 3a 30 30 3a 30 30 7d 0a 20 20 64 61  3 17:00:00}.  da
4060: 74 65 74 65 73 74 20 36 2e 39 2e 32 20 7b 64 61  tetest 6.9.2 {da
4070: 74 65 74 69 6d 65 28 27 32 30 31 35 2d 31 32 2d  tetime('2015-12-
4080: 32 33 20 31 32 3a 30 30 3a 30 30 7a 27 2c 27 75  23 12:00:00z','u
4090: 74 63 27 29 7d 20 7b 32 30 31 35 2d 31 32 2d 32  tc')} {2015-12-2
40a0: 33 20 31 32 3a 30 30 3a 30 30 7d 0a 20 20 64 61  3 12:00:00}.  da
40b0: 74 65 74 65 73 74 20 36 2e 39 2e 33 20 7b 64 61  tetest 6.9.3 {da
40c0: 74 65 74 69 6d 65 28 27 32 30 31 35 2d 31 32 2d  tetime('2015-12-
40d0: 32 33 20 31 32 3a 30 30 3a 30 30 2d 30 33 3a 30  23 12:00:00-03:0
40e0: 30 27 2c 27 75 74 63 27 29 7d 20 5c 0a 20 20 20  0','utc')} \.   
40f0: 20 20 20 20 20 20 7b 32 30 31 35 2d 31 32 2d 32        {2015-12-2
4100: 33 20 31 35 3a 30 30 3a 30 30 7d 0a 20 20 64 61  3 15:00:00}.  da
4110: 74 65 74 65 73 74 20 36 2e 39 2e 34 20 7b 64 61  tetest 6.9.4 {da
4120: 74 65 74 69 6d 65 28 27 32 30 31 35 2d 31 32 2d  tetime('2015-12-
4130: 32 33 20 31 32 3a 30 30 3a 30 30 27 2c 27 75 74  23 12:00:00','ut
4140: 63 27 2c 27 75 74 63 27 2c 27 75 74 63 27 29 7d  c','utc','utc')}
4150: 20 5c 0a 20 20 20 20 20 20 20 20 20 7b 32 30 31   \.         {201
4160: 35 2d 31 32 2d 32 33 20 31 37 3a 30 30 3a 30 30  5-12-23 17:00:00
4170: 7d 0a 0a 0a 20 20 64 61 74 65 74 65 73 74 20 36  }...  datetest 6
4180: 2e 31 30 20 7b 64 61 74 65 74 69 6d 65 28 27 32  .10 {datetime('2
4190: 30 30 30 2d 30 31 2d 30 31 20 31 32 3a 30 30 3a  000-01-01 12:00:
41a0: 30 30 27 2c 27 6c 6f 63 61 6c 74 69 6d 65 27 29  00','localtime')
41b0: 7d 20 5c 0a 20 20 20 20 20 20 7b 32 30 30 30 2d  } \.      {2000-
41c0: 30 31 2d 30 31 20 30 37 3a 30 30 3a 30 30 7d 0a  01-01 07:00:00}.
41d0: 20 20 64 61 74 65 74 65 73 74 20 36 2e 31 31 20    datetest 6.11 
41e0: 7b 64 61 74 65 74 69 6d 65 28 27 31 39 36 39 2d  {datetime('1969-
41f0: 30 31 2d 30 31 20 31 32 3a 30 30 3a 30 30 27 2c  01-01 12:00:00',
4200: 27 6c 6f 63 61 6c 74 69 6d 65 27 29 7d 20 5c 0a  'localtime')} \.
4210: 20 20 20 20 20 20 7b 31 39 36 39 2d 30 31 2d 30        {1969-01-0
4220: 31 20 30 37 3a 30 30 3a 30 30 7d 0a 20 20 64 61  1 07:00:00}.  da
4230: 74 65 74 65 73 74 20 36 2e 31 32 20 7b 64 61 74  tetest 6.12 {dat
4240: 65 74 69 6d 65 28 27 32 30 33 39 2d 30 31 2d 30  etime('2039-01-0
4250: 31 20 31 32 3a 30 30 3a 30 30 27 2c 27 6c 6f 63  1 12:00:00','loc
4260: 61 6c 74 69 6d 65 27 29 7d 20 5c 0a 20 20 20 20  altime')} \.    
4270: 20 20 7b 32 30 33 39 2d 30 31 2d 30 31 20 30 37    {2039-01-01 07
4280: 3a 30 30 3a 30 30 7d 0a 20 20 64 61 74 65 74 65  :00:00}.  datete
4290: 73 74 20 36 2e 31 33 20 7b 64 61 74 65 74 69 6d  st 6.13 {datetim
42a0: 65 28 27 32 30 30 30 2d 30 37 2d 30 31 20 31 32  e('2000-07-01 12
42b0: 3a 30 30 3a 30 30 27 2c 27 6c 6f 63 61 6c 74 69  :00:00','localti
42c0: 6d 65 27 29 7d 20 5c 0a 20 20 20 20 20 20 7b 32  me')} \.      {2
42d0: 30 30 30 2d 30 37 2d 30 31 20 30 38 3a 30 30 3a  000-07-01 08:00:
42e0: 30 30 7d 0a 20 20 64 61 74 65 74 65 73 74 20 36  00}.  datetest 6
42f0: 2e 31 34 20 7b 64 61 74 65 74 69 6d 65 28 27 31  .14 {datetime('1
4300: 39 36 39 2d 30 37 2d 30 31 20 31 32 3a 30 30 3a  969-07-01 12:00:
4310: 30 30 27 2c 27 6c 6f 63 61 6c 74 69 6d 65 27 29  00','localtime')
4320: 7d 20 5c 0a 20 20 20 20 20 20 7b 31 39 36 39 2d  } \.      {1969-
4330: 30 37 2d 30 31 20 30 37 3a 30 30 3a 30 30 7d 0a  07-01 07:00:00}.
4340: 20 20 64 61 74 65 74 65 73 74 20 36 2e 31 35 20    datetest 6.15 
4350: 7b 64 61 74 65 74 69 6d 65 28 27 32 30 33 39 2d  {datetime('2039-
4360: 30 37 2d 30 31 20 31 32 3a 30 30 3a 30 30 27 2c  07-01 12:00:00',
4370: 27 6c 6f 63 61 6c 74 69 6d 65 27 29 7d 20 5c 0a  'localtime')} \.
4380: 20 20 20 20 20 20 7b 32 30 33 39 2d 30 37 2d 30        {2039-07-0
4390: 31 20 30 37 3a 30 30 3a 30 30 7d 0a 20 20 73 65  1 07:00:00}.  se
43a0: 74 20 73 71 6c 69 74 65 5f 63 75 72 72 65 6e 74  t sqlite_current
43b0: 5f 74 69 6d 65 20 5c 0a 20 20 20 20 20 5b 64 62  _time \.     [db
43c0: 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 73 74   eval {SELECT st
43d0: 72 66 74 69 6d 65 28 27 25 73 27 2c 27 32 30 30  rftime('%s','200
43e0: 30 2d 30 37 2d 30 31 20 31 32 3a 33 34 3a 35 36  0-07-01 12:34:56
43f0: 27 29 7d 5d 0a 20 20 64 61 74 65 74 65 73 74 20  ')}].  datetest 
4400: 36 2e 31 36 20 7b 64 61 74 65 74 69 6d 65 28 27  6.16 {datetime('
4410: 6e 6f 77 27 2c 27 6c 6f 63 61 6c 74 69 6d 65 27  now','localtime'
4420: 29 7d 20 7b 32 30 30 30 2d 30 37 2d 30 31 20 30  )} {2000-07-01 0
4430: 38 3a 33 34 3a 35 36 7d 0a 20 20 64 61 74 65 74  8:34:56}.  datet
4440: 65 73 74 20 36 2e 31 37 20 7b 64 61 74 65 74 69  est 6.17 {dateti
4450: 6d 65 28 27 6e 6f 77 27 2c 27 6c 6f 63 61 6c 74  me('now','localt
4460: 69 6d 65 78 27 29 7d 20 4e 55 4c 4c 0a 20 20 64  imex')} NULL.  d
4470: 61 74 65 74 65 73 74 20 36 2e 31 38 20 7b 64 61  atetest 6.18 {da
4480: 74 65 74 69 6d 65 28 27 6e 6f 77 27 2c 27 6c 6f  tetime('now','lo
4490: 63 61 6c 74 69 6d 27 29 7d 20 4e 55 4c 4c 0a 20  caltim')} NULL. 
44a0: 20 73 65 74 20 73 71 6c 69 74 65 5f 63 75 72 72   set sqlite_curr
44b0: 65 6e 74 5f 74 69 6d 65 20 30 0a 7d 0a 0a 23 20  ent_time 0.}..# 
44c0: 54 68 65 73 65 20 74 77 6f 20 61 72 65 20 61 20  These two are a 
44d0: 62 69 74 20 6f 66 20 61 20 73 63 61 6d 2e 20 54  bit of a scam. T
44e0: 68 65 79 20 61 72 65 20 61 64 64 65 64 20 74 6f  hey are added to
44f0: 20 65 6e 73 75 72 65 20 74 68 61 74 20 31 30 30   ensure that 100
4500: 25 20 6f 66 0a 23 20 74 68 65 20 64 61 74 65 2e  % of.# the date.
4510: 63 20 66 69 6c 65 20 69 73 20 63 6f 76 65 72 65  c file is covere
4520: 64 20 62 79 20 74 65 73 74 69 6e 67 2c 20 65 76  d by testing, ev
4530: 65 6e 20 77 68 65 6e 20 74 68 65 20 74 69 6d 65  en when the time
4540: 2d 7a 6f 6e 65 0a 23 20 69 73 20 6e 6f 74 20 2d  -zone.# is not -
4550: 30 34 30 30 20 28 74 68 65 20 63 6f 6e 64 69 74  0400 (the condit
4560: 69 6f 6e 20 66 6f 72 20 72 75 6e 6e 69 6e 67 20  ion for running 
4570: 6f 66 20 74 68 65 20 62 6c 6f 63 6b 20 6f 66 20  of the block of 
4580: 74 65 73 74 73 20 61 62 6f 76 65 29 2e 0a 23 0a  tests above)..#.
4590: 64 61 74 65 74 65 73 74 20 36 2e 31 39 20 7b 64  datetest 6.19 {d
45a0: 61 74 65 74 69 6d 65 28 27 32 30 33 39 2d 30 37  atetime('2039-07
45b0: 2d 30 31 20 31 32 3a 30 30 3a 30 30 27 2c 27 6c  -01 12:00:00','l
45c0: 6f 63 61 6c 74 69 6d 65 27 2c 6e 75 6c 6c 29 7d  ocaltime',null)}
45d0: 20 4e 55 4c 4c 0a 64 61 74 65 74 65 73 74 20 36   NULL.datetest 6
45e0: 2e 32 30 20 7b 64 61 74 65 74 69 6d 65 28 27 32  .20 {datetime('2
45f0: 30 33 39 2d 30 37 2d 30 31 20 31 32 3a 30 30 3a  039-07-01 12:00:
4600: 30 30 27 2c 27 75 74 63 27 2c 6e 75 6c 6c 29 7d  00','utc',null)}
4610: 20 4e 55 4c 4c 0a 0a 23 20 44 61 74 65 2d 74 69   NULL..# Date-ti
4620: 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61  me functions tha
4630: 74 20 63 6f 6e 74 61 69 6e 20 4e 55 4c 4c 20 61  t contain NULL a
4640: 72 67 75 6d 65 6e 74 73 20 72 65 74 75 72 6e 20  rguments return 
4650: 61 20 4e 55 4c 4c 0a 23 20 72 65 73 75 6c 74 2e  a NULL.# result.
4660: 0a 23 0a 64 61 74 65 74 65 73 74 20 37 2e 31 20  .#.datetest 7.1 
4670: 7b 64 61 74 65 74 69 6d 65 28 6e 75 6c 6c 29 7d  {datetime(null)}
4680: 20 4e 55 4c 4c 0a 64 61 74 65 74 65 73 74 20 37   NULL.datetest 7
4690: 2e 32 20 7b 64 61 74 65 74 69 6d 65 28 27 6e 6f  .2 {datetime('no
46a0: 77 27 2c 6e 75 6c 6c 29 7d 20 4e 55 4c 4c 0a 64  w',null)} NULL.d
46b0: 61 74 65 74 65 73 74 20 37 2e 33 20 7b 64 61 74  atetest 7.3 {dat
46c0: 65 74 69 6d 65 28 27 6e 6f 77 27 2c 27 6c 6f 63  etime('now','loc
46d0: 61 6c 74 69 6d 65 27 2c 6e 75 6c 6c 29 7d 20 4e  altime',null)} N
46e0: 55 4c 4c 0a 64 61 74 65 74 65 73 74 20 37 2e 34  ULL.datetest 7.4
46f0: 20 7b 74 69 6d 65 28 6e 75 6c 6c 29 7d 20 4e 55   {time(null)} NU
4700: 4c 4c 0a 64 61 74 65 74 65 73 74 20 37 2e 35 20  LL.datetest 7.5 
4710: 7b 74 69 6d 65 28 27 6e 6f 77 27 2c 6e 75 6c 6c  {time('now',null
4720: 29 7d 20 4e 55 4c 4c 0a 64 61 74 65 74 65 73 74  )} NULL.datetest
4730: 20 37 2e 36 20 7b 74 69 6d 65 28 27 6e 6f 77 27   7.6 {time('now'
4740: 2c 27 6c 6f 63 61 6c 74 69 6d 65 27 2c 6e 75 6c  ,'localtime',nul
4750: 6c 29 7d 20 4e 55 4c 4c 0a 64 61 74 65 74 65 73  l)} NULL.datetes
4760: 74 20 37 2e 37 20 7b 64 61 74 65 28 6e 75 6c 6c  t 7.7 {date(null
4770: 29 7d 20 4e 55 4c 4c 0a 64 61 74 65 74 65 73 74  )} NULL.datetest
4780: 20 37 2e 38 20 7b 64 61 74 65 28 27 6e 6f 77 27   7.8 {date('now'
4790: 2c 6e 75 6c 6c 29 7d 20 4e 55 4c 4c 0a 64 61 74  ,null)} NULL.dat
47a0: 65 74 65 73 74 20 37 2e 39 20 7b 64 61 74 65 28  etest 7.9 {date(
47b0: 27 6e 6f 77 27 2c 27 6c 6f 63 61 6c 74 69 6d 65  'now','localtime
47c0: 27 2c 6e 75 6c 6c 29 7d 20 4e 55 4c 4c 0a 64 61  ',null)} NULL.da
47d0: 74 65 74 65 73 74 20 37 2e 31 30 20 7b 6a 75 6c  tetest 7.10 {jul
47e0: 69 61 6e 64 61 79 28 6e 75 6c 6c 29 7d 20 4e 55  ianday(null)} NU
47f0: 4c 4c 0a 64 61 74 65 74 65 73 74 20 37 2e 31 31  LL.datetest 7.11
4800: 20 7b 6a 75 6c 69 61 6e 64 61 79 28 27 6e 6f 77   {julianday('now
4810: 27 2c 6e 75 6c 6c 29 7d 20 4e 55 4c 4c 0a 64 61  ',null)} NULL.da
4820: 74 65 74 65 73 74 20 37 2e 31 32 20 7b 6a 75 6c  tetest 7.12 {jul
4830: 69 61 6e 64 61 79 28 27 6e 6f 77 27 2c 27 6c 6f  ianday('now','lo
4840: 63 61 6c 74 69 6d 65 27 2c 6e 75 6c 6c 29 7d 20  caltime',null)} 
4850: 4e 55 4c 4c 0a 64 61 74 65 74 65 73 74 20 37 2e  NULL.datetest 7.
4860: 31 33 20 7b 73 74 72 66 74 69 6d 65 28 6e 75 6c  13 {strftime(nul
4870: 6c 2c 27 6e 6f 77 27 29 7d 20 4e 55 4c 4c 0a 64  l,'now')} NULL.d
4880: 61 74 65 74 65 73 74 20 37 2e 31 34 20 7b 73 74  atetest 7.14 {st
4890: 72 66 74 69 6d 65 28 27 25 73 27 2c 6e 75 6c 6c  rftime('%s',null
48a0: 29 7d 20 4e 55 4c 4c 0a 64 61 74 65 74 65 73 74  )} NULL.datetest
48b0: 20 37 2e 31 35 20 7b 73 74 72 66 74 69 6d 65 28   7.15 {strftime(
48c0: 27 25 73 27 2c 27 6e 6f 77 27 2c 6e 75 6c 6c 29  '%s','now',null)
48d0: 7d 20 4e 55 4c 4c 0a 64 61 74 65 74 65 73 74 20  } NULL.datetest 
48e0: 37 2e 31 36 20 7b 73 74 72 66 74 69 6d 65 28 27  7.16 {strftime('
48f0: 25 73 27 2c 27 6e 6f 77 27 2c 27 6c 6f 63 61 6c  %s','now','local
4900: 74 69 6d 65 27 2c 6e 75 6c 6c 29 7d 20 4e 55 4c  time',null)} NUL
4910: 4c 0a 0a 23 20 54 65 73 74 20 6d 6f 64 69 66 69  L..# Test modifi
4920: 65 72 73 20 77 68 65 6e 20 74 68 65 20 64 61 74  ers when the dat
4930: 65 20 62 65 67 69 6e 73 20 61 73 20 61 20 6a 75  e begins as a ju
4940: 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 20  lian day number 
4950: 2d 20 74 6f 0a 23 20 6d 61 6b 65 20 73 75 72 65  - to.# make sure
4960: 20 74 68 65 20 48 48 3a 4d 4d 3a 53 53 20 69 73   the HH:MM:SS is
4970: 20 70 72 65 73 65 72 76 65 64 2e 20 20 54 69 63   preserved.  Tic
4980: 6b 65 74 20 23 35 35 31 2e 0a 23 0a 73 65 74 20  ket #551..#.set 
4990: 73 71 6c 69 74 65 5f 63 75 72 72 65 6e 74 5f 74  sqlite_current_t
49a0: 69 6d 65 20 5b 64 62 20 65 76 61 6c 20 7b 53 45  ime [db eval {SE
49b0: 4c 45 43 54 20 73 74 72 66 74 69 6d 65 28 27 25  LECT strftime('%
49c0: 73 27 2c 27 32 30 30 33 2d 31 30 2d 32 32 20 31  s','2003-10-22 1
49d0: 32 3a 33 34 3a 30 30 27 29 7d 5d 0a 64 61 74 65  2:34:00')}].date
49e0: 74 65 73 74 20 38 2e 31 20 7b 64 61 74 65 74 69  test 8.1 {dateti
49f0: 6d 65 28 27 6e 6f 77 27 2c 27 77 65 65 6b 64 61  me('now','weekda
4a00: 79 20 30 27 29 7d 20 7b 32 30 30 33 2d 31 30 2d  y 0')} {2003-10-
4a10: 32 36 20 31 32 3a 33 34 3a 30 30 7d 0a 64 61 74  26 12:34:00}.dat
4a20: 65 74 65 73 74 20 38 2e 32 20 7b 64 61 74 65 74  etest 8.2 {datet
4a30: 69 6d 65 28 27 6e 6f 77 27 2c 27 77 65 65 6b 64  ime('now','weekd
4a40: 61 79 20 31 27 29 7d 20 7b 32 30 30 33 2d 31 30  ay 1')} {2003-10
4a50: 2d 32 37 20 31 32 3a 33 34 3a 30 30 7d 0a 64 61  -27 12:34:00}.da
4a60: 74 65 74 65 73 74 20 38 2e 33 20 7b 64 61 74 65  tetest 8.3 {date
4a70: 74 69 6d 65 28 27 6e 6f 77 27 2c 27 77 65 65 6b  time('now','week
4a80: 64 61 79 20 32 27 29 7d 20 7b 32 30 30 33 2d 31  day 2')} {2003-1
4a90: 30 2d 32 38 20 31 32 3a 33 34 3a 30 30 7d 0a 64  0-28 12:34:00}.d
4aa0: 61 74 65 74 65 73 74 20 38 2e 34 20 7b 64 61 74  atetest 8.4 {dat
4ab0: 65 74 69 6d 65 28 27 6e 6f 77 27 2c 27 77 65 65  etime('now','wee
4ac0: 6b 64 61 79 20 33 27 29 7d 20 7b 32 30 30 33 2d  kday 3')} {2003-
4ad0: 31 30 2d 32 32 20 31 32 3a 33 34 3a 30 30 7d 0a  10-22 12:34:00}.
4ae0: 64 61 74 65 74 65 73 74 20 38 2e 35 20 7b 64 61  datetest 8.5 {da
4af0: 74 65 74 69 6d 65 28 27 6e 6f 77 27 2c 27 73 74  tetime('now','st
4b00: 61 72 74 20 6f 66 20 6d 6f 6e 74 68 27 29 7d 20  art of month')} 
4b10: 7b 32 30 30 33 2d 31 30 2d 30 31 20 30 30 3a 30  {2003-10-01 00:0
4b20: 30 3a 30 30 7d 0a 64 61 74 65 74 65 73 74 20 38  0:00}.datetest 8
4b30: 2e 36 20 7b 64 61 74 65 74 69 6d 65 28 27 6e 6f  .6 {datetime('no
4b40: 77 27 2c 27 73 74 61 72 74 20 6f 66 20 79 65 61  w','start of yea
4b50: 72 27 29 7d 20 7b 32 30 30 33 2d 30 31 2d 30 31  r')} {2003-01-01
4b60: 20 30 30 3a 30 30 3a 30 30 7d 0a 64 61 74 65 74   00:00:00}.datet
4b70: 65 73 74 20 38 2e 37 20 7b 64 61 74 65 74 69 6d  est 8.7 {datetim
4b80: 65 28 27 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f  e('now','start o
4b90: 66 20 64 61 79 27 29 7d 20 7b 32 30 30 33 2d 31  f day')} {2003-1
4ba0: 30 2d 32 32 20 30 30 3a 30 30 3a 30 30 7d 0a 64  0-22 00:00:00}.d
4bb0: 61 74 65 74 65 73 74 20 38 2e 38 20 7b 64 61 74  atetest 8.8 {dat
4bc0: 65 74 69 6d 65 28 27 6e 6f 77 27 2c 27 31 20 64  etime('now','1 d
4bd0: 61 79 27 29 7d 20 7b 32 30 30 33 2d 31 30 2d 32  ay')} {2003-10-2
4be0: 33 20 31 32 3a 33 34 3a 30 30 7d 0a 64 61 74 65  3 12:34:00}.date
4bf0: 74 65 73 74 20 38 2e 39 20 7b 64 61 74 65 74 69  test 8.9 {dateti
4c00: 6d 65 28 27 6e 6f 77 27 2c 27 2b 31 20 64 61 79  me('now','+1 day
4c10: 27 29 7d 20 7b 32 30 30 33 2d 31 30 2d 32 33 20  ')} {2003-10-23 
4c20: 31 32 3a 33 34 3a 30 30 7d 0a 64 61 74 65 74 65  12:34:00}.datete
4c30: 73 74 20 38 2e 31 30 20 7b 64 61 74 65 74 69 6d  st 8.10 {datetim
4c40: 65 28 27 6e 6f 77 27 2c 27 2b 31 2e 32 35 20 64  e('now','+1.25 d
4c50: 61 79 27 29 7d 20 7b 32 30 30 33 2d 31 30 2d 32  ay')} {2003-10-2
4c60: 33 20 31 38 3a 33 34 3a 30 30 7d 0a 64 61 74 65  3 18:34:00}.date
4c70: 74 65 73 74 20 38 2e 31 31 20 7b 64 61 74 65 74  test 8.11 {datet
4c80: 69 6d 65 28 27 6e 6f 77 27 2c 27 2d 31 2e 30 20  ime('now','-1.0 
4c90: 64 61 79 27 29 7d 20 7b 32 30 30 33 2d 31 30 2d  day')} {2003-10-
4ca0: 32 31 20 31 32 3a 33 34 3a 30 30 7d 0a 64 61 74  21 12:34:00}.dat
4cb0: 65 74 65 73 74 20 38 2e 31 32 20 7b 64 61 74 65  etest 8.12 {date
4cc0: 74 69 6d 65 28 27 6e 6f 77 27 2c 27 31 20 6d 6f  time('now','1 mo
4cd0: 6e 74 68 27 29 7d 20 7b 32 30 30 33 2d 31 31 2d  nth')} {2003-11-
4ce0: 32 32 20 31 32 3a 33 34 3a 30 30 7d 0a 64 61 74  22 12:34:00}.dat
4cf0: 65 74 65 73 74 20 38 2e 31 33 20 7b 64 61 74 65  etest 8.13 {date
4d00: 74 69 6d 65 28 27 6e 6f 77 27 2c 27 31 31 20 6d  time('now','11 m
4d10: 6f 6e 74 68 27 29 7d 20 7b 32 30 30 34 2d 30 39  onth')} {2004-09
4d20: 2d 32 32 20 31 32 3a 33 34 3a 30 30 7d 0a 64 61  -22 12:34:00}.da
4d30: 74 65 74 65 73 74 20 38 2e 31 34 20 7b 64 61 74  tetest 8.14 {dat
4d40: 65 74 69 6d 65 28 27 6e 6f 77 27 2c 27 2d 31 33  etime('now','-13
4d50: 20 6d 6f 6e 74 68 27 29 7d 20 7b 32 30 30 32 2d   month')} {2002-
4d60: 30 39 2d 32 32 20 31 32 3a 33 34 3a 30 30 7d 0a  09-22 12:34:00}.
4d70: 64 61 74 65 74 65 73 74 20 38 2e 31 35 20 7b 64  datetest 8.15 {d
4d80: 61 74 65 74 69 6d 65 28 27 6e 6f 77 27 2c 27 31  atetime('now','1
4d90: 2e 35 20 6d 6f 6e 74 68 73 27 29 7d 20 7b 32 30  .5 months')} {20
4da0: 30 33 2d 31 32 2d 30 37 20 31 32 3a 33 34 3a 30  03-12-07 12:34:0
4db0: 30 7d 0a 64 61 74 65 74 65 73 74 20 38 2e 31 36  0}.datetest 8.16
4dc0: 20 7b 64 61 74 65 74 69 6d 65 28 27 6e 6f 77 27   {datetime('now'
4dd0: 2c 27 2d 35 20 79 65 61 72 73 27 29 7d 20 7b 31  ,'-5 years')} {1
4de0: 39 39 38 2d 31 30 2d 32 32 20 31 32 3a 33 34 3a  998-10-22 12:34:
4df0: 30 30 7d 0a 64 61 74 65 74 65 73 74 20 38 2e 31  00}.datetest 8.1
4e00: 37 20 7b 64 61 74 65 74 69 6d 65 28 27 6e 6f 77  7 {datetime('now
4e10: 27 2c 27 2b 31 30 2e 35 20 6d 69 6e 75 74 65 73  ','+10.5 minutes
4e20: 27 29 7d 20 7b 32 30 30 33 2d 31 30 2d 32 32 20  ')} {2003-10-22 
4e30: 31 32 3a 34 34 3a 33 30 7d 0a 64 61 74 65 74 65  12:44:30}.datete
4e40: 73 74 20 38 2e 31 38 20 7b 64 61 74 65 74 69 6d  st 8.18 {datetim
4e50: 65 28 27 6e 6f 77 27 2c 27 2d 31 2e 32 35 20 68  e('now','-1.25 h
4e60: 6f 75 72 73 27 29 7d 20 7b 32 30 30 33 2d 31 30  ours')} {2003-10
4e70: 2d 32 32 20 31 31 3a 31 39 3a 30 30 7d 0a 64 61  -22 11:19:00}.da
4e80: 74 65 74 65 73 74 20 38 2e 31 39 20 7b 64 61 74  tetest 8.19 {dat
4e90: 65 74 69 6d 65 28 27 6e 6f 77 27 2c 27 31 31 2e  etime('now','11.
4ea0: 32 35 20 73 65 63 6f 6e 64 73 27 29 7d 20 7b 32  25 seconds')} {2
4eb0: 30 30 33 2d 31 30 2d 32 32 20 31 32 3a 33 34 3a  003-10-22 12:34:
4ec0: 31 31 7d 0a 64 61 74 65 74 65 73 74 20 38 2e 39  11}.datetest 8.9
4ed0: 30 20 7b 64 61 74 65 74 69 6d 65 28 27 6e 6f 77  0 {datetime('now
4ee0: 27 2c 27 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d  ','abcdefghijklm
4ef0: 6e 6f 70 71 72 73 74 75 76 77 79 78 7a 41 42 43  nopqrstuvwyxzABC
4f00: 44 45 46 47 48 49 4a 4c 4d 4e 4f 50 27 29 7d 20  DEFGHIJLMNOP')} 
4f10: 4e 55 4c 4c 0a 73 65 74 20 73 71 6c 69 74 65 5f  NULL.set sqlite_
4f20: 63 75 72 72 65 6e 74 5f 74 69 6d 65 20 30 0a 0a  current_time 0..
4f30: 23 20 4e 65 67 61 74 69 76 65 20 79 65 61 72 73  # Negative years
4f40: 20 77 6f 72 6b 2e 20 20 45 78 61 6d 70 6c 65 3a   work.  Example:
4f50: 20 20 27 2d 34 37 31 33 2d 31 31 2d 32 36 27 20    '-4713-11-26' 
4f60: 69 73 20 4a 44 20 31 2e 35 2e 0a 23 0a 64 61 74  is JD 1.5..#.dat
4f70: 65 74 65 73 74 20 39 2e 31 20 7b 6a 75 6c 69 61  etest 9.1 {julia
4f80: 6e 64 61 79 28 27 2d 34 37 31 33 2d 31 31 2d 32  nday('-4713-11-2
4f90: 34 20 31 32 3a 30 30 3a 30 30 27 29 7d 20 7b 30  4 12:00:00')} {0
4fa0: 2e 30 7d 0a 64 61 74 65 74 65 73 74 20 39 2e 32  .0}.datetest 9.2
4fb0: 20 7b 6a 75 6c 69 61 6e 64 61 79 28 64 61 74 65   {julianday(date
4fc0: 74 69 6d 65 28 35 29 29 7d 20 7b 35 2e 30 7d 0a  time(5))} {5.0}.
4fd0: 64 61 74 65 74 65 73 74 20 39 2e 33 20 7b 6a 75  datetest 9.3 {ju
4fe0: 6c 69 61 6e 64 61 79 28 64 61 74 65 74 69 6d 65  lianday(datetime
4ff0: 28 31 30 29 29 7d 20 7b 31 30 2e 30 7d 0a 64 61  (10))} {10.0}.da
5000: 74 65 74 65 73 74 20 39 2e 34 20 7b 6a 75 6c 69  tetest 9.4 {juli
5010: 61 6e 64 61 79 28 64 61 74 65 74 69 6d 65 28 31  anday(datetime(1
5020: 30 30 29 29 7d 20 7b 31 30 30 2e 30 7d 0a 64 61  00))} {100.0}.da
5030: 74 65 74 65 73 74 20 39 2e 35 20 7b 6a 75 6c 69  tetest 9.5 {juli
5040: 61 6e 64 61 79 28 64 61 74 65 74 69 6d 65 28 31  anday(datetime(1
5050: 30 30 30 29 29 7d 20 7b 31 30 30 30 2e 30 7d 0a  000))} {1000.0}.
5060: 64 61 74 65 74 65 73 74 20 39 2e 36 20 7b 6a 75  datetest 9.6 {ju
5070: 6c 69 61 6e 64 61 79 28 64 61 74 65 74 69 6d 65  lianday(datetime
5080: 28 31 30 30 30 30 29 29 7d 20 7b 31 30 30 30 30  (10000))} {10000
5090: 2e 30 7d 0a 64 61 74 65 74 65 73 74 20 39 2e 37  .0}.datetest 9.7
50a0: 20 7b 6a 75 6c 69 61 6e 64 61 79 28 64 61 74 65   {julianday(date
50b0: 74 69 6d 65 28 31 30 30 30 30 30 29 29 7d 20 7b  time(100000))} {
50c0: 31 30 30 30 30 30 2e 30 7d 0a 0a 23 20 64 61 74  100000.0}..# dat
50d0: 65 74 69 6d 65 28 29 20 77 69 74 68 20 6a 75 73  etime() with jus
50e0: 74 20 61 6e 20 48 48 3a 4d 4d 3a 53 53 20 63 6f  t an HH:MM:SS co
50f0: 72 72 65 63 74 6c 79 20 69 6e 73 65 72 74 73 20  rrectly inserts 
5100: 74 68 65 20 64 61 74 65 20 32 30 30 30 2d 30 31  the date 2000-01
5110: 2d 30 31 2e 0a 23 0a 64 61 74 65 74 65 73 74 20  -01..#.datetest 
5120: 31 30 2e 31 20 7b 64 61 74 65 74 69 6d 65 28 27  10.1 {datetime('
5130: 30 31 3a 30 32 3a 30 33 27 29 7d 20 20 7b 32 30  01:02:03')}  {20
5140: 30 30 2d 30 31 2d 30 31 20 30 31 3a 30 32 3a 30  00-01-01 01:02:0
5150: 33 7d 0a 64 61 74 65 74 65 73 74 20 31 30 2e 32  3}.datetest 10.2
5160: 20 7b 64 61 74 65 28 27 30 31 3a 30 32 3a 30 33   {date('01:02:03
5170: 27 29 7d 20 20 7b 32 30 30 30 2d 30 31 2d 30 31  ')}  {2000-01-01
5180: 7d 0a 64 61 74 65 74 65 73 74 20 31 30 2e 33 20  }.datetest 10.3 
5190: 7b 73 74 72 66 74 69 6d 65 28 27 25 59 2d 25 6d  {strftime('%Y-%m
51a0: 2d 25 64 20 25 48 3a 25 4d 27 2c 27 30 31 3a 30  -%d %H:%M','01:0
51b0: 32 3a 30 33 27 29 7d 20 7b 32 30 30 30 2d 30 31  2:03')} {2000-01
51c0: 2d 30 31 20 30 31 3a 30 32 7d 0a 0a 23 20 54 65  -01 01:02}..# Te
51d0: 73 74 20 74 68 65 20 6e 65 77 20 48 48 3a 4d 4d  st the new HH:MM
51e0: 3a 53 53 20 6d 6f 64 69 66 69 65 72 0a 23 0a 64  :SS modifier.#.d
51f0: 61 74 65 74 65 73 74 20 31 31 2e 31 20 7b 64 61  atetest 11.1 {da
5200: 74 65 74 69 6d 65 28 27 32 30 30 34 2d 30 32 2d  tetime('2004-02-
5210: 32 38 20 32 30 3a 30 30 3a 30 30 27 2c 20 27 2d  28 20:00:00', '-
5220: 30 31 3a 32 30 3a 33 30 27 29 7d 20 5c 0a 20 20  01:20:30')} \.  
5230: 20 7b 32 30 30 34 2d 30 32 2d 32 38 20 31 38 3a   {2004-02-28 18:
5240: 33 39 3a 33 30 7d 0a 64 61 74 65 74 65 73 74 20  39:30}.datetest 
5250: 31 31 2e 32 20 7b 64 61 74 65 74 69 6d 65 28 27  11.2 {datetime('
5260: 32 30 30 34 2d 30 32 2d 32 38 20 32 30 3a 30 30  2004-02-28 20:00
5270: 3a 30 30 27 2c 20 27 2b 31 32 3a 33 30 3a 30 30  :00', '+12:30:00
5280: 27 29 7d 20 5c 0a 20 20 20 7b 32 30 30 34 2d 30  ')} \.   {2004-0
5290: 32 2d 32 39 20 30 38 3a 33 30 3a 30 30 7d 0a 64  2-29 08:30:00}.d
52a0: 61 74 65 74 65 73 74 20 31 31 2e 33 20 7b 64 61  atetest 11.3 {da
52b0: 74 65 74 69 6d 65 28 27 32 30 30 34 2d 30 32 2d  tetime('2004-02-
52c0: 32 38 20 32 30 3a 30 30 3a 30 30 27 2c 20 27 2b  28 20:00:00', '+
52d0: 31 32 3a 33 30 27 29 7d 20 5c 0a 20 20 20 7b 32  12:30')} \.   {2
52e0: 30 30 34 2d 30 32 2d 32 39 20 30 38 3a 33 30 3a  004-02-29 08:30:
52f0: 30 30 7d 0a 64 61 74 65 74 65 73 74 20 31 31 2e  00}.datetest 11.
5300: 34 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30  4 {datetime('200
5310: 34 2d 30 32 2d 32 38 20 32 30 3a 30 30 3a 30 30  4-02-28 20:00:00
5320: 27 2c 20 27 31 32 3a 33 30 27 29 7d 20 5c 0a 20  ', '12:30')} \. 
5330: 20 20 7b 32 30 30 34 2d 30 32 2d 32 39 20 30 38    {2004-02-29 08
5340: 3a 33 30 3a 30 30 7d 0a 64 61 74 65 74 65 73 74  :30:00}.datetest
5350: 20 31 31 2e 35 20 7b 64 61 74 65 74 69 6d 65 28   11.5 {datetime(
5360: 27 32 30 30 34 2d 30 32 2d 32 38 20 32 30 3a 30  '2004-02-28 20:0
5370: 30 3a 30 30 27 2c 20 27 2d 31 32 3a 30 30 27 29  0:00', '-12:00')
5380: 7d 20 5c 0a 20 20 20 7b 32 30 30 34 2d 30 32 2d  } \.   {2004-02-
5390: 32 38 20 30 38 3a 30 30 3a 30 30 7d 0a 64 61 74  28 08:00:00}.dat
53a0: 65 74 65 73 74 20 31 31 2e 36 20 7b 64 61 74 65  etest 11.6 {date
53b0: 74 69 6d 65 28 27 32 30 30 34 2d 30 32 2d 32 38  time('2004-02-28
53c0: 20 32 30 3a 30 30 3a 30 30 27 2c 20 27 2d 31 32   20:00:00', '-12
53d0: 3a 30 31 27 29 7d 20 5c 0a 20 20 20 7b 32 30 30  :01')} \.   {200
53e0: 34 2d 30 32 2d 32 38 20 30 37 3a 35 39 3a 30 30  4-02-28 07:59:00
53f0: 7d 0a 64 61 74 65 74 65 73 74 20 31 31 2e 37 20  }.datetest 11.7 
5400: 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30 34 2d  {datetime('2004-
5410: 30 32 2d 32 38 20 32 30 3a 30 30 3a 30 30 27 2c  02-28 20:00:00',
5420: 20 27 2d 31 31 3a 35 39 27 29 7d 20 5c 0a 20 20   '-11:59')} \.  
5430: 20 7b 32 30 30 34 2d 30 32 2d 32 38 20 30 38 3a   {2004-02-28 08:
5440: 30 31 3a 30 30 7d 0a 64 61 74 65 74 65 73 74 20  01:00}.datetest 
5450: 31 31 2e 38 20 7b 64 61 74 65 74 69 6d 65 28 27  11.8 {datetime('
5460: 32 30 30 34 2d 30 32 2d 32 38 20 32 30 3a 30 30  2004-02-28 20:00
5470: 3a 30 30 27 2c 20 27 31 31 3a 35 39 27 29 7d 20  :00', '11:59')} 
5480: 5c 0a 20 20 20 7b 32 30 30 34 2d 30 32 2d 32 39  \.   {2004-02-29
5490: 20 30 37 3a 35 39 3a 30 30 7d 0a 64 61 74 65 74   07:59:00}.datet
54a0: 65 73 74 20 31 31 2e 39 20 7b 64 61 74 65 74 69  est 11.9 {dateti
54b0: 6d 65 28 27 32 30 30 34 2d 30 32 2d 32 38 20 32  me('2004-02-28 2
54c0: 30 3a 30 30 3a 30 30 27 2c 20 27 31 32 3a 30 31  0:00:00', '12:01
54d0: 27 29 7d 20 5c 0a 20 20 20 7b 32 30 30 34 2d 30  ')} \.   {2004-0
54e0: 32 2d 32 39 20 30 38 3a 30 31 3a 30 30 7d 0a 64  2-29 08:01:00}.d
54f0: 61 74 65 74 65 73 74 20 31 31 2e 31 30 20 7b 64  atetest 11.10 {d
5500: 61 74 65 74 69 6d 65 28 27 32 30 30 34 2d 30 32  atetime('2004-02
5510: 2d 32 38 20 32 30 3a 30 30 3a 30 30 27 2c 20 27  -28 20:00:00', '
5520: 31 32 3a 36 30 27 29 7d 20 4e 55 4c 4c 0a 0a 23  12:60')} NULL..#
5530: 20 54 69 63 6b 65 74 20 23 31 39 36 34 0a 64 61   Ticket #1964.da
5540: 74 65 74 65 73 74 20 31 32 2e 31 20 7b 64 61 74  tetest 12.1 {dat
5550: 65 74 69 6d 65 28 27 32 30 30 35 2d 30 39 2d 30  etime('2005-09-0
5560: 31 27 29 7d 20 7b 32 30 30 35 2d 30 39 2d 30 31  1')} {2005-09-01
5570: 20 30 30 3a 30 30 3a 30 30 7d 0a 64 61 74 65 74   00:00:00}.datet
5580: 65 73 74 20 31 32 2e 32 20 7b 64 61 74 65 74 69  est 12.2 {dateti
5590: 6d 65 28 27 32 30 30 35 2d 30 39 2d 30 31 27 2c  me('2005-09-01',
55a0: 27 2b 30 20 68 6f 75 72 73 27 29 7d 20 7b 32 30  '+0 hours')} {20
55b0: 30 35 2d 30 39 2d 30 31 20 30 30 3a 30 30 3a 30  05-09-01 00:00:0
55c0: 30 7d 0a 0a 23 20 54 69 63 6b 65 74 20 23 31 39  0}..# Ticket #19
55d0: 39 31 0a 64 6f 5f 74 65 73 74 20 64 61 74 65 2d  91.do_test date-
55e0: 31 33 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  13.1 {.  execsql
55f0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 73 74   {.    SELECT st
5600: 72 66 74 69 6d 65 28 27 25 59 2d 25 6d 2d 25 64  rftime('%Y-%m-%d
5610: 20 25 48 3a 25 4d 3a 25 66 27 2c 20 6a 75 6c 69   %H:%M:%f', juli
5620: 61 6e 64 61 79 28 27 32 30 30 36 2d 30 39 2d 32  anday('2006-09-2
5630: 34 54 31 30 3a 35 30 3a 32 36 2e 30 34 37 27 29  4T10:50:26.047')
5640: 29 0a 20 20 7d 0a 7d 20 7b 7b 32 30 30 36 2d 30  ).  }.} {{2006-0
5650: 39 2d 32 34 20 31 30 3a 35 30 3a 32 36 2e 30 34  9-24 10:50:26.04
5660: 37 7d 7d 0a 0a 23 20 54 69 63 6b 65 74 20 23 32  7}}..# Ticket #2
5670: 31 35 33 0a 64 61 74 65 74 65 73 74 20 31 33 2e  153.datetest 13.
5680: 32 20 7b 73 74 72 66 74 69 6d 65 28 27 25 59 2d  2 {strftime('%Y-
5690: 25 6d 2d 25 64 20 25 48 3a 25 4d 3a 25 53 27 2c  %m-%d %H:%M:%S',
56a0: 20 27 32 30 30 37 2d 30 31 2d 30 31 20 31 32 3a   '2007-01-01 12:
56b0: 33 34 3a 35 39 2e 36 27 29 7d 20 5c 0a 20 20 7b  34:59.6')} \.  {
56c0: 32 30 30 37 2d 30 31 2d 30 31 20 31 32 3a 33 34  2007-01-01 12:34
56d0: 3a 35 39 7d 0a 64 61 74 65 74 65 73 74 20 31 33  :59}.datetest 13
56e0: 2e 33 20 7b 73 74 72 66 74 69 6d 65 28 27 25 59  .3 {strftime('%Y
56f0: 2d 25 6d 2d 25 64 20 25 48 3a 25 4d 3a 25 66 27  -%m-%d %H:%M:%f'
5700: 2c 20 27 32 30 30 37 2d 30 31 2d 30 31 20 31 32  , '2007-01-01 12
5710: 3a 33 34 3a 35 39 2e 36 27 29 7d 20 5c 0a 20 20  :34:59.6')} \.  
5720: 7b 32 30 30 37 2d 30 31 2d 30 31 20 31 32 3a 33  {2007-01-01 12:3
5730: 34 3a 35 39 2e 36 30 30 7d 0a 64 61 74 65 74 65  4:59.600}.datete
5740: 73 74 20 31 33 2e 34 20 7b 73 74 72 66 74 69 6d  st 13.4 {strftim
5750: 65 28 27 25 59 2d 25 6d 2d 25 64 20 25 48 3a 25  e('%Y-%m-%d %H:%
5760: 4d 3a 25 53 27 2c 20 27 32 30 30 37 2d 30 31 2d  M:%S', '2007-01-
5770: 30 31 20 31 32 3a 35 39 3a 35 39 2e 36 27 29 7d  01 12:59:59.6')}
5780: 20 5c 0a 20 20 7b 32 30 30 37 2d 30 31 2d 30 31   \.  {2007-01-01
5790: 20 31 32 3a 35 39 3a 35 39 7d 0a 64 61 74 65 74   12:59:59}.datet
57a0: 65 73 74 20 31 33 2e 35 20 7b 73 74 72 66 74 69  est 13.5 {strfti
57b0: 6d 65 28 27 25 59 2d 25 6d 2d 25 64 20 25 48 3a  me('%Y-%m-%d %H:
57c0: 25 4d 3a 25 66 27 2c 20 27 32 30 30 37 2d 30 31  %M:%f', '2007-01
57d0: 2d 30 31 20 31 32 3a 35 39 3a 35 39 2e 36 27 29  -01 12:59:59.6')
57e0: 7d 20 5c 0a 20 20 7b 32 30 30 37 2d 30 31 2d 30  } \.  {2007-01-0
57f0: 31 20 31 32 3a 35 39 3a 35 39 2e 36 30 30 7d 0a  1 12:59:59.600}.
5800: 64 61 74 65 74 65 73 74 20 31 33 2e 36 20 7b 73  datetest 13.6 {s
5810: 74 72 66 74 69 6d 65 28 27 25 59 2d 25 6d 2d 25  trftime('%Y-%m-%
5820: 64 20 25 48 3a 25 4d 3a 25 53 27 2c 20 27 32 30  d %H:%M:%S', '20
5830: 30 37 2d 30 31 2d 30 31 20 32 33 3a 35 39 3a 35  07-01-01 23:59:5
5840: 39 2e 36 27 29 7d 20 5c 0a 20 20 7b 32 30 30 37  9.6')} \.  {2007
5850: 2d 30 31 2d 30 31 20 32 33 3a 35 39 3a 35 39 7d  -01-01 23:59:59}
5860: 0a 64 61 74 65 74 65 73 74 20 31 33 2e 37 20 7b  .datetest 13.7 {
5870: 73 74 72 66 74 69 6d 65 28 27 25 59 2d 25 6d 2d  strftime('%Y-%m-
5880: 25 64 20 25 48 3a 25 4d 3a 25 66 27 2c 20 27 32  %d %H:%M:%f', '2
5890: 30 30 37 2d 30 31 2d 30 31 20 32 33 3a 35 39 3a  007-01-01 23:59:
58a0: 35 39 2e 36 27 29 7d 20 5c 0a 20 20 7b 32 30 30  59.6')} \.  {200
58b0: 37 2d 30 31 2d 30 31 20 32 33 3a 35 39 3a 35 39  7-01-01 23:59:59
58c0: 2e 36 30 30 7d 0a 0a 23 20 54 69 63 6b 65 74 20  .600}..# Ticket 
58d0: 23 33 36 31 38 0a 64 61 74 65 74 65 73 74 20 31  #3618.datetest 1
58e0: 33 2e 31 31 20 7b 6a 75 6c 69 61 6e 64 61 79 28  3.11 {julianday(
58f0: 32 34 35 34 38 33 32 2e 35 2c 27 2d 31 20 64 61  2454832.5,'-1 da
5900: 79 27 29 7d 20 7b 32 34 35 34 38 33 31 2e 35 7d  y')} {2454831.5}
5910: 0a 64 61 74 65 74 65 73 74 20 31 33 2e 31 32 20  .datetest 13.12 
5920: 7b 6a 75 6c 69 61 6e 64 61 79 28 32 34 35 34 38  {julianday(24548
5930: 33 32 2e 35 2c 27 2b 31 20 64 61 79 27 29 7d 20  32.5,'+1 day')} 
5940: 7b 32 34 35 34 38 33 33 2e 35 7d 0a 64 61 74 65  {2454833.5}.date
5950: 74 65 73 74 20 31 33 2e 31 33 20 7b 6a 75 6c 69  test 13.13 {juli
5960: 61 6e 64 61 79 28 32 34 35 34 38 33 32 2e 35 2c  anday(2454832.5,
5970: 27 2d 31 2e 35 20 64 61 79 27 29 7d 20 7b 32 34  '-1.5 day')} {24
5980: 35 34 38 33 31 2e 30 7d 0a 64 61 74 65 74 65 73  54831.0}.datetes
5990: 74 20 31 33 2e 31 34 20 7b 6a 75 6c 69 61 6e 64  t 13.14 {juliand
59a0: 61 79 28 32 34 35 34 38 33 32 2e 35 2c 27 2b 31  ay(2454832.5,'+1
59b0: 2e 35 20 64 61 79 27 29 7d 20 7b 32 34 35 34 38  .5 day')} {24548
59c0: 33 34 2e 30 7d 0a 64 61 74 65 74 65 73 74 20 31  34.0}.datetest 1
59d0: 33 2e 31 35 20 7b 6a 75 6c 69 61 6e 64 61 79 28  3.15 {julianday(
59e0: 32 34 35 34 38 33 32 2e 35 2c 27 2d 33 20 68 6f  2454832.5,'-3 ho
59f0: 75 72 73 27 29 7d 20 7b 32 34 35 34 38 33 32 2e  urs')} {2454832.
5a00: 33 37 35 7d 0a 64 61 74 65 74 65 73 74 20 31 33  375}.datetest 13
5a10: 2e 31 36 20 7b 6a 75 6c 69 61 6e 64 61 79 28 32  .16 {julianday(2
5a20: 34 35 34 38 33 32 2e 35 2c 27 2b 33 20 68 6f 75  454832.5,'+3 hou
5a30: 72 73 27 29 7d 20 7b 32 34 35 34 38 33 32 2e 36  rs')} {2454832.6
5a40: 32 35 7d 0a 64 61 74 65 74 65 73 74 20 31 33 2e  25}.datetest 13.
5a50: 31 37 20 7b 6a 75 6c 69 61 6e 64 61 79 28 32 34  17 {julianday(24
5a60: 35 34 38 33 32 2e 35 2c 27 2d 34 35 20 6d 69 6e  54832.5,'-45 min
5a70: 75 74 65 73 27 29 7d 20 7b 32 34 35 34 38 33 32  utes')} {2454832
5a80: 2e 34 36 38 37 35 7d 0a 64 61 74 65 74 65 73 74  .46875}.datetest
5a90: 20 31 33 2e 31 38 20 7b 6a 75 6c 69 61 6e 64 61   13.18 {julianda
5aa0: 79 28 32 34 35 34 38 33 32 2e 35 2c 27 2b 34 35  y(2454832.5,'+45
5ab0: 20 6d 69 6e 75 74 65 73 27 29 7d 20 7b 32 34 35   minutes')} {245
5ac0: 34 38 33 32 2e 35 33 31 32 35 7d 0a 64 61 74 65  4832.53125}.date
5ad0: 74 65 73 74 20 31 33 2e 31 39 20 7b 6a 75 6c 69  test 13.19 {juli
5ae0: 61 6e 64 61 79 28 32 34 35 34 38 33 32 2e 35 2c  anday(2454832.5,
5af0: 27 2d 36 37 35 20 73 65 63 6f 6e 64 73 27 29 7d  '-675 seconds')}
5b00: 20 7b 32 34 35 34 38 33 32 2e 34 39 32 31 38 37   {2454832.492187
5b10: 35 7d 0a 64 61 74 65 74 65 73 74 20 31 33 2e 32  5}.datetest 13.2
5b20: 30 20 7b 6a 75 6c 69 61 6e 64 61 79 28 32 34 35  0 {julianday(245
5b30: 34 38 33 32 2e 35 2c 27 2b 36 37 35 20 73 65 63  4832.5,'+675 sec
5b40: 6f 6e 64 73 27 29 7d 20 7b 32 34 35 34 38 33 32  onds')} {2454832
5b50: 2e 35 30 37 38 31 32 35 7d 0a 64 61 74 65 74 65  .5078125}.datete
5b60: 73 74 20 31 33 2e 32 31 20 7b 6a 75 6c 69 61 6e  st 13.21 {julian
5b70: 64 61 79 28 32 34 35 34 38 33 32 2e 35 2c 27 2d  day(2454832.5,'-
5b80: 31 2e 35 20 6d 6f 6e 74 68 73 27 29 7d 20 7b 32  1.5 months')} {2
5b90: 34 35 34 37 38 36 2e 35 7d 0a 64 61 74 65 74 65  454786.5}.datete
5ba0: 73 74 20 31 33 2e 32 32 20 7b 6a 75 6c 69 61 6e  st 13.22 {julian
5bb0: 64 61 79 28 32 34 35 34 38 33 32 2e 35 2c 27 2b  day(2454832.5,'+
5bc0: 31 2e 35 20 6d 6f 6e 74 68 73 27 29 7d 20 7b 32  1.5 months')} {2
5bd0: 34 35 34 38 37 38 2e 35 7d 0a 64 61 74 65 74 65  454878.5}.datete
5be0: 73 74 20 31 33 2e 32 33 20 7b 6a 75 6c 69 61 6e  st 13.23 {julian
5bf0: 64 61 79 28 32 34 35 34 38 33 32 2e 35 2c 27 2d  day(2454832.5,'-
5c00: 31 2e 35 20 79 65 61 72 73 27 29 7d 20 7b 32 34  1.5 years')} {24
5c10: 35 34 32 38 34 2e 30 7d 0a 64 61 74 65 74 65 73  54284.0}.datetes
5c20: 74 20 31 33 2e 32 34 20 7b 6a 75 6c 69 61 6e 64  t 13.24 {juliand
5c30: 61 79 28 32 34 35 34 38 33 32 2e 35 2c 27 2b 31  ay(2454832.5,'+1
5c40: 2e 35 20 79 65 61 72 73 27 29 7d 20 7b 32 34 35  .5 years')} {245
5c50: 35 33 38 30 2e 30 7d 0a 0a 64 61 74 65 74 65 73  5380.0}..datetes
5c60: 74 20 31 33 2e 33 30 20 7b 64 61 74 65 28 27 32  t 13.30 {date('2
5c70: 30 30 30 2d 30 31 2d 30 31 27 2c 27 2b 31 2e 35  000-01-01','+1.5
5c80: 20 79 65 61 72 73 27 29 7d 20 7b 32 30 30 31 2d   years')} {2001-
5c90: 30 37 2d 30 32 7d 0a 64 61 74 65 74 65 73 74 20  07-02}.datetest 
5ca0: 31 33 2e 33 31 20 7b 64 61 74 65 28 27 32 30 30  13.31 {date('200
5cb0: 31 2d 30 31 2d 30 31 27 2c 27 2b 31 2e 35 20 79  1-01-01','+1.5 y
5cc0: 65 61 72 73 27 29 7d 20 7b 32 30 30 32 2d 30 37  ears')} {2002-07
5cd0: 2d 30 32 7d 0a 64 61 74 65 74 65 73 74 20 31 33  -02}.datetest 13
5ce0: 2e 33 32 20 7b 64 61 74 65 28 27 32 30 30 32 2d  .32 {date('2002-
5cf0: 30 31 2d 30 31 27 2c 27 2b 31 2e 35 20 79 65 61  01-01','+1.5 yea
5d00: 72 73 27 29 7d 20 7b 32 30 30 33 2d 30 37 2d 30  rs')} {2003-07-0
5d10: 32 7d 0a 64 61 74 65 74 65 73 74 20 31 33 2e 33  2}.datetest 13.3
5d20: 33 20 7b 64 61 74 65 28 27 32 30 30 32 2d 30 31  3 {date('2002-01
5d30: 2d 30 31 27 2c 27 2d 31 2e 35 20 79 65 61 72 73  -01','-1.5 years
5d40: 27 29 7d 20 7b 32 30 30 30 2d 30 37 2d 30 32 7d  ')} {2000-07-02}
5d50: 0a 64 61 74 65 74 65 73 74 20 31 33 2e 33 34 20  .datetest 13.34 
5d60: 7b 64 61 74 65 28 27 32 30 30 31 2d 30 31 2d 30  {date('2001-01-0
5d70: 31 27 2c 27 2d 31 2e 35 20 79 65 61 72 73 27 29  1','-1.5 years')
5d80: 7d 20 7b 31 39 39 39 2d 30 37 2d 30 32 7d 0a 0a  } {1999-07-02}..
5d90: 23 20 54 65 73 74 20 66 6f 72 20 69 73 73 75 65  # Test for issue
5da0: 73 20 72 65 70 6f 72 74 65 64 20 62 79 20 42 61  s reported by Ba
5db0: 72 65 46 65 65 74 20 28 6c 69 73 74 2e 73 71 6c  reFeet (list.sql
5dc0: 20 61 74 20 74 61 6e 64 62 2e 63 6f 6d 2e 61 75   at tandb.com.au
5dd0: 29 0a 23 20 6f 6e 20 6d 61 69 6c 69 6e 67 20 6c  ).# on mailing l
5de0: 69 73 74 20 6f 6e 20 32 30 30 38 2d 30 36 2d 31  ist on 2008-06-1
5df0: 32 2e 0a 23 0a 23 20 50 75 74 20 61 20 66 6c 6f  2..#.# Put a flo
5e00: 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62  ating point numb
5e10: 65 72 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  er in the databa
5e20: 73 65 20 73 6f 20 74 68 61 74 20 77 65 20 63 61  se so that we ca
5e30: 6e 20 6d 61 6e 69 70 75 6c 61 74 65 0a 23 20 72  n manipulate.# r
5e40: 61 77 20 62 69 74 73 20 75 73 69 6e 67 20 74 68  aw bits using th
5e50: 65 20 68 65 78 69 6f 20 69 6e 74 65 72 66 61 63  e hexio interfac
5e60: 65 2e 0a 23 0a 69 66 20 7b 30 3d 3d 5b 73 71 6c  e..#.if {0==[sql
5e70: 69 74 65 33 20 2d 68 61 73 2d 63 6f 64 65 63 5d  ite3 -has-codec]
5e80: 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 64 61  } {.  do_test da
5e90: 74 65 2d 31 34 2e 31 20 7b 0a 20 20 20 20 65 78  te-14.1 {.    ex
5ea0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52  ecsql {.      PR
5eb0: 41 47 4d 41 20 61 75 74 6f 5f 76 61 63 75 75 6d  AGMA auto_vacuum
5ec0: 3d 4f 46 46 3b 0a 20 20 20 20 20 20 50 52 41 47  =OFF;.      PRAG
5ed0: 4d 41 20 70 61 67 65 5f 73 69 7a 65 20 3d 20 31  MA page_size = 1
5ee0: 30 32 34 3b 0a 20 20 20 20 20 20 43 52 45 41 54  024;.      CREAT
5ef0: 45 20 54 41 42 4c 45 20 74 31 28 78 29 3b 0a 20  E TABLE t1(x);. 
5f00: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
5f10: 20 74 31 20 56 41 4c 55 45 53 28 31 2e 31 29 3b   t1 VALUES(1.1);
5f20: 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 20 63 6c  .    }.    db cl
5f30: 6f 73 65 0a 20 20 20 20 68 65 78 69 6f 5f 77 72  ose.    hexio_wr
5f40: 69 74 65 20 74 65 73 74 2e 64 62 20 32 30 34 30  ite test.db 2040
5f50: 20 34 31 34 32 62 61 33 32 62 66 66 66 66 66 66   4142ba32bffffff
5f60: 39 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62  9.    sqlite3 db
5f70: 20 74 65 73 74 2e 64 62 0a 20 20 20 20 64 62 20   test.db.    db 
5f80: 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46  eval {SELECT * F
5f90: 52 4f 4d 20 74 31 7d 0a 20 20 7d 20 7b 32 34 35  ROM t1}.  } {245
5fa0: 34 36 32 39 2e 35 7d 0a 20 20 0a 20 20 23 20 43  4629.5}.  .  # C
5fb0: 68 61 6e 67 69 6e 67 20 74 68 65 20 6c 65 61 73  hanging the leas
5fc0: 74 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62 79  t significant by
5fd0: 74 65 20 6f 66 20 74 68 65 20 66 6c 6f 61 74 69  te of the floati
5fe0: 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 20 62  ng point value b
5ff0: 65 74 77 65 65 6e 0a 20 20 23 20 30 30 20 61 6e  etween.  # 00 an
6000: 64 20 46 46 20 73 68 6f 75 6c 64 20 61 6c 77 61  d FF should alwa
6010: 79 73 20 67 65 6e 65 72 61 74 65 20 61 20 74 69  ys generate a ti
6020: 6d 65 20 6f 66 20 65 69 74 68 65 72 20 32 33 3a  me of either 23:
6030: 35 39 3a 35 39 20 6f 72 20 30 30 3a 30 30 3a 30  59:59 or 00:00:0
6040: 30 2c 0a 20 20 23 20 6e 65 76 65 72 20 32 34 3a  0,.  # never 24:
6050: 30 30 3a 30 30 0a 20 20 23 0a 20 20 66 6f 72 20  00:00.  #.  for 
6060: 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 3c 3d 32  {set i 0} {$i<=2
6070: 35 35 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20  55} {incr i} {. 
6080: 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 20 20     db close.    
6090: 68 65 78 69 6f 5f 77 72 69 74 65 20 74 65 73 74  hexio_write test
60a0: 2e 64 62 20 32 30 34 37 20 5b 66 6f 72 6d 61 74  .db 2047 [format
60b0: 20 25 30 32 78 20 24 69 5d 0a 20 20 20 20 73 71   %02x $i].    sq
60c0: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
60d0: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 64 61 74  .    do_test dat
60e0: 65 2d 31 34 2e 32 2e 24 69 20 7b 0a 20 20 20 20  e-14.2.$i {.    
60f0: 20 20 73 65 74 20 64 61 74 65 20 5b 64 62 20 6f    set date [db o
6100: 6e 65 20 7b 53 45 4c 45 43 54 20 64 61 74 65 74  ne {SELECT datet
6110: 69 6d 65 28 78 29 20 46 52 4f 4d 20 74 31 7d 5d  ime(x) FROM t1}]
6120: 0a 20 20 20 20 20 20 65 78 70 72 20 7b 24 64 61  .      expr {$da
6130: 74 65 20 65 71 20 22 32 30 30 38 2d 30 36 2d 31  te eq "2008-06-1
6140: 32 20 30 30 3a 30 30 3a 30 30 22 20 7c 7c 20 24  2 00:00:00" || $
6150: 64 61 74 65 20 65 71 20 22 32 30 30 38 2d 30 36  date eq "2008-06
6160: 2d 31 31 20 32 33 3a 35 39 3a 35 39 22 7d 0a 20  -11 23:59:59"}. 
6170: 20 20 20 7d 20 7b 31 7d 0a 20 20 7d 0a 7d 0a 0a     } {1}.  }.}..
6180: 23 20 56 65 72 69 66 79 20 74 68 61 74 20 6d 75  # Verify that mu
6190: 6c 74 69 70 6c 65 20 63 61 6c 6c 73 20 74 6f 20  ltiple calls to 
61a0: 64 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 77  date functions w
61b0: 69 74 68 20 27 6e 6f 77 27 20 72 65 74 75 72 6e  ith 'now' return
61c0: 20 74 68 65 0a 23 20 73 61 6d 65 20 61 6e 73 77   the.# same answ
61d0: 65 72 2e 0a 23 0a 23 20 45 56 49 44 45 4e 43 45  er..#.# EVIDENCE
61e0: 2d 4f 46 3a 20 52 2d 33 34 38 31 38 2d 31 33 36  -OF: R-34818-136
61f0: 36 34 20 54 68 65 20 27 6e 6f 77 27 20 61 72 67  64 The 'now' arg
6200: 75 6d 65 6e 74 20 74 6f 20 64 61 74 65 20 61 6e  ument to date an
6210: 64 20 74 69 6d 65 0a 23 20 66 75 6e 63 74 69 6f  d time.# functio
6220: 6e 73 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e  ns always return
6230: 73 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61  s exactly the sa
6240: 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 6d 75 6c  me value for mul
6250: 74 69 70 6c 65 0a 23 20 69 6e 76 6f 63 61 74 69  tiple.# invocati
6260: 6f 6e 73 20 77 69 74 68 69 6e 20 74 68 65 20 73  ons within the s
6270: 61 6d 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70  ame sqlite3_step
6280: 28 29 20 63 61 6c 6c 2e 0a 23 0a 70 72 6f 63 20  () call..#.proc 
6290: 73 6c 65 65 70 65 72 20 7b 7d 20 7b 61 66 74 65  sleeper {} {afte
62a0: 72 20 31 30 30 7d 0a 64 6f 5f 74 65 73 74 20 64  r 100}.do_test d
62b0: 61 74 65 2d 31 35 2e 31 20 7b 0a 20 20 64 62 20  ate-15.1 {.  db 
62c0: 66 75 6e 63 20 73 6c 65 65 70 65 72 20 73 6c 65  func sleeper sle
62d0: 65 70 65 72 0a 20 20 64 62 20 65 76 61 6c 20 7b  eper.  db eval {
62e0: 0a 20 20 20 20 20 53 45 4c 45 43 54 20 63 20 2d  .     SELECT c -
62f0: 20 61 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20   a FROM (SELECT 
6300: 6a 75 6c 69 61 6e 64 61 79 28 27 6e 6f 77 27 29  julianday('now')
6310: 20 41 53 20 61 2c 0a 20 20 20 20 20 20 20 20 20   AS a,.         
6320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6330: 20 20 20 20 20 20 73 6c 65 65 70 65 72 28 29 2c        sleeper(),
6340: 20 6a 75 6c 69 61 6e 64 61 79 28 27 6e 6f 77 27   julianday('now'
6350: 29 20 41 53 20 63 29 3b 0a 20 20 7d 0a 7d 20 7b  ) AS c);.  }.} {
6360: 30 2e 30 7d 0a 64 6f 5f 74 65 73 74 20 64 61 74  0.0}.do_test dat
6370: 65 2d 31 35 2e 32 20 7b 0a 20 20 64 62 20 65 76  e-15.2 {.  db ev
6380: 61 6c 20 7b 0a 20 20 20 20 20 53 45 4c 45 43 54  al {.     SELECT
6390: 20 61 3d 3d 62 20 46 52 4f 4d 20 28 53 45 4c 45   a==b FROM (SELE
63a0: 43 54 20 63 75 72 72 65 6e 74 5f 74 69 6d 65 73  CT current_times
63b0: 74 61 6d 70 20 41 53 20 61 2c 0a 20 20 20 20 20  tamp AS a,.     
63c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
63d0: 20 20 20 20 20 20 20 20 20 20 73 6c 65 65 70 65            sleepe
63e0: 72 28 29 2c 20 63 75 72 72 65 6e 74 5f 74 69 6d  r(), current_tim
63f0: 65 73 74 61 6d 70 20 41 53 20 62 29 3b 0a 20 20  estamp AS b);.  
6400: 7d 0a 7d 20 7b 31 7d 0a 0a 23 20 54 65 73 74 73  }.} {1}..# Tests
6410: 20 6f 66 20 65 78 74 72 65 6d 65 20 76 61 6c 75   of extreme valu
6420: 65 73 20 69 6e 20 64 61 74 65 2f 74 69 6d 65 20  es in date/time 
6430: 66 75 6e 63 74 69 6f 6e 73 2e 20 20 52 75 6e 20  functions.  Run 
6440: 77 69 74 68 20 55 42 53 61 6e 20 6f 72 20 74 68  with UBSan or th
6450: 65 0a 23 20 65 71 75 69 76 61 6c 65 6e 74 20 74  e.# equivalent t
6460: 6f 20 76 65 72 69 66 79 20 6e 6f 20 73 69 67 6e  o verify no sign
6470: 65 64 20 69 6e 74 65 72 67 65 72 20 6f 76 65 72  ed interger over
6480: 66 6c 6f 77 20 77 61 72 6e 69 6e 67 73 2e 0a 23  flow warnings..#
6490: 0a 64 61 74 65 74 65 73 74 20 31 36 2e 31 20 7b  .datetest 16.1 {
64a0: 64 61 74 65 28 31 34 37 34 38 33 36 34 39 29 7d  date(147483649)}
64b0: 20 4e 55 4c 4c 0a 64 61 74 65 74 65 73 74 20 31   NULL.datetest 1
64c0: 36 2e 32 20 7b 64 61 74 65 74 69 6d 65 28 30 29  6.2 {datetime(0)
64d0: 7d 20 7b 2d 34 37 31 33 2d 31 31 2d 32 34 20 31  } {-4713-11-24 1
64e0: 32 3a 30 30 3a 30 30 7d 0a 64 61 74 65 74 65 73  2:00:00}.datetes
64f0: 74 20 31 36 2e 33 20 7b 64 61 74 65 74 69 6d 65  t 16.3 {datetime
6500: 28 35 33 37 33 34 38 34 2e 34 39 39 39 39 39 39  (5373484.4999999
6510: 39 29 7d 20 7b 39 39 39 39 2d 31 32 2d 33 31 20  9)} {9999-12-31 
6520: 32 33 3a 35 39 3a 35 39 7d 0a 64 61 74 65 74 65  23:59:59}.datete
6530: 73 74 20 31 36 2e 34 20 7b 6a 75 6c 69 61 6e 64  st 16.4 {juliand
6540: 61 79 28 27 2d 34 37 31 33 2d 31 31 2d 32 34 20  ay('-4713-11-24 
6550: 31 32 3a 30 30 3a 30 30 27 29 7d 20 30 2e 30 0a  12:00:00')} 0.0.
6560: 64 61 74 65 74 65 73 74 20 31 36 2e 35 20 7b 6a  datetest 16.5 {j
6570: 75 6c 69 61 6e 64 61 79 28 27 39 39 39 39 2d 31  ulianday('9999-1
6580: 32 2d 33 31 20 32 33 3a 35 39 3a 35 39 2e 39 39  2-31 23:59:59.99
6590: 39 27 29 7d 20 35 33 37 33 34 38 34 2e 34 39 39  9')} 5373484.499
65a0: 39 39 39 39 39 0a 64 61 74 65 74 65 73 74 20 31  99999.datetest 1
65b0: 36 2e 36 20 7b 64 61 74 65 74 69 6d 65 28 30 2c  6.6 {datetime(0,
65c0: 27 2b 34 36 34 32 36 39 30 36 30 37 39 39 20 73  '+464269060799 s
65d0: 65 63 6f 6e 64 73 27 29 7d 20 7b 39 39 39 39 2d  econds')} {9999-
65e0: 31 32 2d 33 31 20 32 33 3a 35 39 3a 35 39 7d 0a  12-31 23:59:59}.
65f0: 64 61 74 65 74 65 73 74 20 31 36 2e 37 20 7b 64  datetest 16.7 {d
6600: 61 74 65 74 69 6d 65 28 30 2c 27 2b 34 36 34 32  atetime(0,'+4642
6610: 36 39 30 36 30 38 30 30 20 73 65 63 6f 6e 64 73  69060800 seconds
6620: 27 29 7d 20 4e 55 4c 4c 0a 64 61 74 65 74 65 73  ')} NULL.datetes
6630: 74 20 31 36 2e 38 20 7b 64 61 74 65 74 69 6d 65  t 16.8 {datetime
6640: 28 30 2c 27 2b 37 37 33 37 38 31 37 36 37 39 20  (0,'+7737817679 
6650: 6d 69 6e 75 74 65 73 27 29 7d 20 7b 39 39 39 39  minutes')} {9999
6660: 2d 31 32 2d 33 31 20 32 33 3a 35 39 3a 30 30 7d  -12-31 23:59:00}
6670: 0a 64 61 74 65 74 65 73 74 20 31 36 2e 39 20 7b  .datetest 16.9 {
6680: 64 61 74 65 74 69 6d 65 28 30 2c 27 2b 37 37 33  datetime(0,'+773
6690: 37 38 31 37 36 38 30 20 6d 69 6e 75 74 65 73 27  7817680 minutes'
66a0: 29 7d 20 4e 55 4c 4c 0a 64 61 74 65 74 65 73 74  )} NULL.datetest
66b0: 20 31 36 2e 31 30 20 7b 64 61 74 65 74 69 6d 65   16.10 {datetime
66c0: 28 30 2c 27 2b 31 32 38 39 36 33 36 32 37 20 68  (0,'+128963627 h
66d0: 6f 75 72 73 27 29 7d 20 7b 39 39 39 39 2d 31 32  ours')} {9999-12
66e0: 2d 33 31 20 32 33 3a 30 30 3a 30 30 7d 0a 64 61  -31 23:00:00}.da
66f0: 74 65 74 65 73 74 20 31 36 2e 31 31 20 7b 64 61  tetest 16.11 {da
6700: 74 65 74 69 6d 65 28 30 2c 27 2b 31 32 38 39 36  tetime(0,'+12896
6710: 33 36 32 38 20 68 6f 75 72 73 27 29 7d 20 4e 55  3628 hours')} NU
6720: 4c 4c 0a 64 61 74 65 74 65 73 74 20 31 36 2e 31  LL.datetest 16.1
6730: 32 20 7b 64 61 74 65 74 69 6d 65 28 30 2c 27 2b  2 {datetime(0,'+
6740: 35 33 37 33 34 38 34 20 64 61 79 73 27 29 7d 20  5373484 days')} 
6750: 7b 39 39 39 39 2d 31 32 2d 33 31 20 31 32 3a 30  {9999-12-31 12:0
6760: 30 3a 30 30 7d 0a 64 61 74 65 74 65 73 74 20 31  0:00}.datetest 1
6770: 36 2e 31 33 20 7b 64 61 74 65 74 69 6d 65 28 30  6.13 {datetime(0
6780: 2c 27 2b 35 33 37 33 34 38 35 20 64 61 79 73 27  ,'+5373485 days'
6790: 29 7d 20 4e 55 4c 4c 0a 64 61 74 65 74 65 73 74  )} NULL.datetest
67a0: 20 31 36 2e 31 34 20 7b 64 61 74 65 74 69 6d 65   16.14 {datetime
67b0: 28 30 2c 27 2b 31 37 36 35 34 35 20 6d 6f 6e 74  (0,'+176545 mont
67c0: 68 73 27 29 7d 20 7b 39 39 39 39 2d 31 32 2d 32  hs')} {9999-12-2
67d0: 34 20 31 32 3a 30 30 3a 30 30 7d 0a 64 61 74 65  4 12:00:00}.date
67e0: 74 65 73 74 20 31 36 2e 31 35 20 7b 64 61 74 65  test 16.15 {date
67f0: 74 69 6d 65 28 30 2c 27 2b 31 37 36 35 34 36 20  time(0,'+176546 
6800: 6d 6f 6e 74 68 73 27 29 7d 20 4e 55 4c 4c 0a 64  months')} NULL.d
6810: 61 74 65 74 65 73 74 20 31 36 2e 31 36 20 7b 64  atetest 16.16 {d
6820: 61 74 65 74 69 6d 65 28 30 2c 27 2b 31 34 37 31  atetime(0,'+1471
6830: 32 20 79 65 61 72 73 27 29 7d 20 7b 39 39 39 39  2 years')} {9999
6840: 2d 31 31 2d 32 34 20 31 32 3a 30 30 3a 30 30 7d  -11-24 12:00:00}
6850: 0a 64 61 74 65 74 65 73 74 20 31 36 2e 31 37 20  .datetest 16.17 
6860: 7b 64 61 74 65 74 69 6d 65 28 30 2c 27 2b 31 34  {datetime(0,'+14
6870: 37 31 33 20 79 65 61 72 73 27 29 7d 20 4e 55 4c  713 years')} NUL
6880: 4c 0a 64 61 74 65 74 65 73 74 20 31 36 2e 32 30  L.datetest 16.20
6890: 20 7b 64 61 74 65 74 69 6d 65 28 35 33 37 33 34   {datetime(53734
68a0: 38 34 2e 34 39 39 39 39 39 39 2c 27 2d 34 36 34  84.4999999,'-464
68b0: 32 36 39 30 36 30 37 39 39 20 73 65 63 6f 6e 64  269060799 second
68c0: 73 27 29 7d 20 5c 0a 20 20 20 20 20 20 20 20 20  s')} \.         
68d0: 20 20 20 20 20 20 20 7b 2d 34 37 31 33 2d 31 31         {-4713-11
68e0: 2d 32 34 20 31 32 3a 30 30 3a 30 30 7d 0a 64 61  -24 12:00:00}.da
68f0: 74 65 74 65 73 74 20 31 36 2e 32 31 20 7b 64 61  tetest 16.21 {da
6900: 74 65 74 69 6d 65 28 35 33 37 33 34 38 34 2c 27  tetime(5373484,'
6910: 2d 34 36 34 32 36 39 30 36 30 38 30 30 20 73 65  -464269060800 se
6920: 63 6f 6e 64 73 27 29 7d 20 4e 55 4c 4c 0a 64 61  conds')} NULL.da
6930: 74 65 74 65 73 74 20 31 36 2e 32 32 20 7b 64 61  tetest 16.22 {da
6940: 74 65 74 69 6d 65 28 35 33 37 33 34 38 34 2e 34  tetime(5373484.4
6950: 39 39 39 39 39 39 2c 27 2d 37 37 33 37 38 31 37  999999,'-7737817
6960: 36 37 39 20 6d 69 6e 75 74 65 73 27 29 7d 20 5c  679 minutes')} \
6970: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6980: 7b 2d 34 37 31 33 2d 31 31 2d 32 34 20 31 32 3a  {-4713-11-24 12:
6990: 30 30 3a 35 39 7d 0a 64 61 74 65 74 65 73 74 20  00:59}.datetest 
69a0: 31 36 2e 32 33 20 7b 64 61 74 65 74 69 6d 65 28  16.23 {datetime(
69b0: 35 33 37 33 34 38 34 2c 27 2d 37 37 33 37 38 31  5373484,'-773781
69c0: 37 36 38 30 20 6d 69 6e 75 74 65 73 27 29 7d 20  7680 minutes')} 
69d0: 4e 55 4c 4c 0a 64 61 74 65 74 65 73 74 20 31 36  NULL.datetest 16
69e0: 2e 32 34 20 7b 64 61 74 65 74 69 6d 65 28 35 33  .24 {datetime(53
69f0: 37 33 34 38 34 2e 34 39 39 39 39 39 39 2c 27 2d  73484.4999999,'-
6a00: 31 32 38 39 36 33 36 32 37 20 68 6f 75 72 73 27  128963627 hours'
6a10: 29 7d 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20  )} \.           
6a20: 20 20 20 20 7b 2d 34 37 31 33 2d 31 31 2d 32 34      {-4713-11-24
6a30: 20 31 32 3a 35 39 3a 35 39 7d 0a 64 61 74 65 74   12:59:59}.datet
6a40: 65 73 74 20 31 36 2e 32 35 20 7b 64 61 74 65 74  est 16.25 {datet
6a50: 69 6d 65 28 35 33 37 33 34 38 34 2c 27 2d 31 32  ime(5373484,'-12
6a60: 38 39 36 33 36 32 38 20 68 6f 75 72 73 27 29 7d  8963628 hours')}
6a70: 20 4e 55 4c 4c 0a 64 61 74 65 74 65 73 74 20 31   NULL.datetest 1
6a80: 36 2e 32 36 20 7b 64 61 74 65 74 69 6d 65 28 35  6.26 {datetime(5
6a90: 33 37 33 34 38 34 2c 27 2d 35 33 37 33 34 38 34  373484,'-5373484
6aa0: 20 64 61 79 73 27 29 7d 20 7b 2d 34 37 31 33 2d   days')} {-4713-
6ab0: 31 31 2d 32 34 20 31 32 3a 30 30 3a 30 30 7d 0a  11-24 12:00:00}.
6ac0: 64 61 74 65 74 65 73 74 20 31 36 2e 32 37 20 7b  datetest 16.27 {
6ad0: 64 61 74 65 74 69 6d 65 28 35 33 37 33 34 38 34  datetime(5373484
6ae0: 2c 27 2d 35 33 37 33 34 38 35 20 64 61 79 73 27  ,'-5373485 days'
6af0: 29 7d 20 4e 55 4c 4c 0a 64 61 74 65 74 65 73 74  )} NULL.datetest
6b00: 20 31 36 2e 32 38 20 7b 64 61 74 65 74 69 6d 65   16.28 {datetime
6b10: 28 35 33 37 33 34 38 34 2c 27 2d 31 37 36 35 34  (5373484,'-17654
6b20: 35 20 6d 6f 6e 74 68 73 27 29 7d 20 7b 2d 34 37  5 months')} {-47
6b30: 31 33 2d 31 32 2d 30 31 20 31 32 3a 30 30 3a 30  13-12-01 12:00:0
6b40: 30 7d 0a 64 61 74 65 74 65 73 74 20 31 36 2e 32  0}.datetest 16.2
6b50: 39 20 7b 64 61 74 65 74 69 6d 65 28 35 33 37 33  9 {datetime(5373
6b60: 34 38 34 2c 27 2d 31 37 36 35 34 36 20 6d 6f 6e  484,'-176546 mon
6b70: 74 68 73 27 29 7d 20 4e 55 4c 4c 0a 64 61 74 65  ths')} NULL.date
6b80: 74 65 73 74 20 31 36 2e 33 30 20 7b 64 61 74 65  test 16.30 {date
6b90: 74 69 6d 65 28 35 33 37 33 34 38 34 2c 27 2d 31  time(5373484,'-1
6ba0: 34 37 31 32 20 79 65 61 72 73 27 29 7d 20 7b 2d  4712 years')} {-
6bb0: 34 37 31 33 2d 31 32 2d 33 31 20 31 32 3a 30 30  4713-12-31 12:00
6bc0: 3a 30 30 7d 0a 64 61 74 65 74 65 73 74 20 31 36  :00}.datetest 16
6bd0: 2e 33 31 20 7b 64 61 74 65 74 69 6d 65 28 35 33  .31 {datetime(53
6be0: 37 33 34 38 34 2c 27 2d 31 34 37 31 33 20 79 65  73484,'-14713 ye
6bf0: 61 72 73 27 29 7d 20 4e 55 4c 4c 0a 0a 23 20 32  ars')} NULL..# 2
6c00: 30 31 37 2d 30 33 2d 30 32 3a 20 57 72 6f 6e 67  017-03-02: Wrong
6c10: 20 27 73 74 61 72 74 20 6f 66 20 64 61 79 27 20   'start of day' 
6c20: 63 6f 6d 70 75 74 61 74 69 6f 6e 2e 0a 23 20 68  computation..# h
6c30: 74 74 70 73 3a 2f 2f 77 77 77 2e 73 71 6c 69 74  ttps://www.sqlit
6c40: 65 2e 6f 72 67 2f 73 72 63 2f 69 6e 66 6f 2f 36  e.org/src/info/6
6c50: 30 39 37 63 62 39 32 37 34 35 33 32 37 61 31 0a  097cb92745327a1.
6c60: 23 0a 64 61 74 65 74 65 73 74 20 31 37 2e 31 20  #.datetest 17.1 
6c70: 7b 64 61 74 65 74 69 6d 65 28 32 34 35 37 37 35  {datetime(245775
6c80: 34 2c 20 27 73 74 61 72 74 20 6f 66 20 64 61 79  4, 'start of day
6c90: 27 29 7d 20 7b 32 30 31 36 2d 31 32 2d 33 31 20  ')} {2016-12-31 
6ca0: 30 30 3a 30 30 3a 30 30 7d 0a 64 61 74 65 74 65  00:00:00}.datete
6cb0: 73 74 20 31 37 2e 32 20 7b 64 61 74 65 74 69 6d  st 17.2 {datetim
6cc0: 65 28 32 34 35 37 38 32 38 29 7d 20 7b 32 30 31  e(2457828)} {201
6cd0: 37 2d 30 33 2d 31 35 20 31 32 3a 30 30 3a 30 30  7-03-15 12:00:00
6ce0: 7d 0a 64 61 74 65 74 65 73 74 20 31 37 2e 33 20  }.datetest 17.3 
6cf0: 7b 64 61 74 65 74 69 6d 65 28 32 34 35 37 38 32  {datetime(245782
6d00: 38 2c 27 73 74 61 72 74 20 6f 66 20 64 61 79 27  8,'start of day'
6d10: 29 7d 20 7b 32 30 31 37 2d 30 33 2d 31 35 20 30  )} {2017-03-15 0
6d20: 30 3a 30 30 3a 30 30 7d 0a 64 61 74 65 74 65 73  0:00:00}.datetes
6d30: 74 20 31 37 2e 34 20 7b 64 61 74 65 74 69 6d 65  t 17.4 {datetime
6d40: 28 32 34 35 37 38 32 38 2c 27 73 74 61 72 74 20  (2457828,'start 
6d50: 6f 66 20 6d 6f 6e 74 68 27 29 7d 20 7b 32 30 31  of month')} {201
6d60: 37 2d 30 33 2d 30 31 20 30 30 3a 30 30 3a 30 30  7-03-01 00:00:00
6d70: 7d 0a 64 61 74 65 74 65 73 74 20 31 37 2e 35 20  }.datetest 17.5 
6d80: 7b 64 61 74 65 74 69 6d 65 28 32 34 35 37 38 32  {datetime(245782
6d90: 38 2c 27 73 74 61 72 74 20 6f 66 20 79 65 61 72  8,'start of year
6da0: 27 29 7d 20 7b 32 30 31 37 2d 30 31 2d 30 31 20  ')} {2017-01-01 
6db0: 30 30 3a 30 30 3a 30 30 7d 0a 64 61 74 65 74 65  00:00:00}.datete
6dc0: 73 74 20 31 37 2e 36 20 7b 64 61 74 65 74 69 6d  st 17.6 {datetim
6dd0: 65 28 33 37 2c 27 73 74 61 72 74 20 6f 66 20 79  e(37,'start of y
6de0: 65 61 72 27 29 7d 20 4e 55 4c 4c 0a 64 61 74 65  ear')} NULL.date
6df0: 74 65 73 74 20 31 37 2e 37 20 7b 64 61 74 65 74  test 17.7 {datet
6e00: 69 6d 65 28 33 38 2c 27 73 74 61 72 74 20 6f 66  ime(38,'start of
6e10: 20 79 65 61 72 27 29 7d 20 7b 2d 34 37 31 32 2d   year')} {-4712-
6e20: 30 31 2d 30 31 20 30 30 3a 30 30 3a 30 30 7d 0a  01-01 00:00:00}.
6e30: 0a 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a     ...finish_test.