/ Hex Artifact Content
Login

Artifact 42973251b9429f2c41b77eb98a7b0b0ba2d3b2c0:


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 27 31 32 33  b julianday('123
09b0: 34 35 2e 36 27 29 20 31 32 33 34 35 2e 36 0a 64  45.6') 12345.6.d
09c0: 61 74 65 74 65 73 74 20 31 2e 32 34 20 7b 6a 75  atetest 1.24 {ju
09d0: 6c 69 61 6e 64 61 79 28 27 32 30 30 31 2d 30 31  lianday('2001-01
09e0: 2d 30 31 20 31 32 3a 30 30 3a 30 30 20 62 6f 67  -01 12:00:00 bog
09f0: 75 73 27 29 7d 20 4e 55 4c 4c 0a 64 61 74 65 74  us')} NULL.datet
0a00: 65 73 74 20 31 2e 32 35 20 7b 6a 75 6c 69 61 6e  est 1.25 {julian
0a10: 64 61 79 28 27 32 30 30 31 2d 30 31 2d 30 31 20  day('2001-01-01 
0a20: 62 6f 67 75 73 27 29 7d 20 4e 55 4c 4c 0a 64 61  bogus')} NULL.da
0a30: 74 65 74 65 73 74 20 31 2e 32 36 20 7b 6a 75 6c  tetest 1.26 {jul
0a40: 69 61 6e 64 61 79 28 27 32 30 30 31 2d 30 31 2d  ianday('2001-01-
0a50: 30 31 20 31 32 3a 36 30 3a 30 30 27 29 7d 20 4e  01 12:60:00')} N
0a60: 55 4c 4c 0a 64 61 74 65 74 65 73 74 20 31 2e 32  ULL.datetest 1.2
0a70: 37 20 7b 6a 75 6c 69 61 6e 64 61 79 28 27 32 30  7 {julianday('20
0a80: 30 31 2d 30 31 2d 30 31 20 31 32 3a 35 39 3a 36  01-01-01 12:59:6
0a90: 30 27 29 7d 20 4e 55 4c 4c 0a 64 61 74 65 74 65  0')} NULL.datete
0aa0: 73 74 20 31 2e 32 38 20 7b 6a 75 6c 69 61 6e 64  st 1.28 {juliand
0ab0: 61 79 28 27 32 30 30 31 2d 30 30 2d 30 31 27 29  ay('2001-00-01')
0ac0: 7d 20 4e 55 4c 4c 0a 64 61 74 65 74 65 73 74 20  } NULL.datetest 
0ad0: 31 2e 32 39 20 7b 6a 75 6c 69 61 6e 64 61 79 28  1.29 {julianday(
0ae0: 27 32 30 30 31 2d 30 31 2d 30 30 27 29 7d 20 4e  '2001-01-00')} N
0af0: 55 4c 4c 0a 0a 64 61 74 65 74 65 73 74 20 32 2e  ULL..datetest 2.
0b00: 31 20 64 61 74 65 74 69 6d 65 28 30 2c 27 75 6e  1 datetime(0,'un
0b10: 69 78 65 70 6f 63 68 27 29 20 7b 31 39 37 30 2d  ixepoch') {1970-
0b20: 30 31 2d 30 31 20 30 30 3a 30 30 3a 30 30 7d 0a  01-01 00:00:00}.
0b30: 64 61 74 65 74 65 73 74 20 32 2e 31 62 20 64 61  datetest 2.1b da
0b40: 74 65 74 69 6d 65 28 30 2c 27 75 6e 69 78 65 70  tetime(0,'unixep
0b50: 6f 63 27 29 20 4e 55 4c 4c 0a 64 61 74 65 74 65  oc') NULL.datete
0b60: 73 74 20 32 2e 31 63 20 64 61 74 65 74 69 6d 65  st 2.1c datetime
0b70: 28 30 2c 27 75 6e 69 78 65 70 6f 63 68 78 27 29  (0,'unixepochx')
0b80: 20 4e 55 4c 4c 0a 64 61 74 65 74 65 73 74 20 32   NULL.datetest 2
0b90: 2e 31 64 20 64 61 74 65 74 69 6d 65 28 27 32 30  .1d datetime('20
0ba0: 30 33 2d 31 30 2d 32 32 27 2c 27 75 6e 69 78 65  03-10-22','unixe
0bb0: 70 6f 63 68 27 29 20 4e 55 4c 4c 0a 64 61 74 65  poch') NULL.date
0bc0: 74 65 73 74 20 32 2e 32 20 64 61 74 65 74 69 6d  test 2.2 datetim
0bd0: 65 28 39 34 36 36 38 34 38 30 30 2c 27 75 6e 69  e(946684800,'uni
0be0: 78 65 70 6f 63 68 27 29 20 7b 32 30 30 30 2d 30  xepoch') {2000-0
0bf0: 31 2d 30 31 20 30 30 3a 30 30 3a 30 30 7d 0a 64  1-01 00:00:00}.d
0c00: 61 74 65 74 65 73 74 20 32 2e 32 62 20 64 61 74  atetest 2.2b dat
0c10: 65 74 69 6d 65 28 27 39 34 36 36 38 34 38 30 30  etime('946684800
0c20: 27 2c 27 75 6e 69 78 65 70 6f 63 68 27 29 20 7b  ','unixepoch') {
0c30: 32 30 30 30 2d 30 31 2d 30 31 20 30 30 3a 30 30  2000-01-01 00:00
0c40: 3a 30 30 7d 0a 66 6f 72 20 7b 73 65 74 20 69 20  :00}.for {set i 
0c50: 30 7d 20 7b 24 69 3c 31 30 30 30 7d 20 7b 69 6e  0} {$i<1000} {in
0c60: 63 72 20 69 7d 20 7b 0a 20 20 73 65 74 20 73 71  cr i} {.  set sq
0c70: 6c 20 5b 66 6f 72 6d 61 74 20 7b 73 74 72 66 74  l [format {strft
0c80: 69 6d 65 28 27 25 25 48 3a 25 25 4d 3a 25 25 66  ime('%%H:%%M:%%f
0c90: 27 2c 31 32 33 37 39 36 32 34 38 30 2e 25 30 33  ',1237962480.%03
0ca0: 64 2c 27 75 6e 69 78 65 70 6f 63 68 27 29 7d 20  d,'unixepoch')} 
0cb0: 24 69 5d 0a 20 20 73 65 74 20 72 65 73 20 5b 66  $i].  set res [f
0cc0: 6f 72 6d 61 74 20 7b 30 36 3a 32 38 3a 30 30 2e  ormat {06:28:00.
0cd0: 25 30 33 64 7d 20 24 69 5d 0a 20 20 64 61 74 65  %03d} $i].  date
0ce0: 74 65 73 74 20 32 2e 32 63 2d 24 69 20 24 73 71  test 2.2c-$i $sq
0cf0: 6c 20 24 72 65 73 0a 7d 0a 64 61 74 65 74 65 73  l $res.}.datetes
0d00: 74 20 32 2e 33 20 7b 64 61 74 65 28 27 32 30 30  t 2.3 {date('200
0d10: 33 2d 31 30 2d 32 32 27 2c 27 77 65 65 6b 64 61  3-10-22','weekda
0d20: 79 20 30 27 29 7d 20 32 30 30 33 2d 31 30 2d 32  y 0')} 2003-10-2
0d30: 36 0a 64 61 74 65 74 65 73 74 20 32 2e 34 20 7b  6.datetest 2.4 {
0d40: 64 61 74 65 28 27 32 30 30 33 2d 31 30 2d 32 32  date('2003-10-22
0d50: 27 2c 27 77 65 65 6b 64 61 79 20 31 27 29 7d 20  ','weekday 1')} 
0d60: 32 30 30 33 2d 31 30 2d 32 37 0a 64 61 74 65 74  2003-10-27.datet
0d70: 65 73 74 20 32 2e 34 61 20 7b 64 61 74 65 28 27  est 2.4a {date('
0d80: 32 30 30 33 2d 31 30 2d 32 32 27 2c 27 77 65 65  2003-10-22','wee
0d90: 6b 64 61 79 20 20 31 27 29 7d 20 32 30 30 33 2d  kday  1')} 2003-
0da0: 31 30 2d 32 37 0a 64 61 74 65 74 65 73 74 20 32  10-27.datetest 2
0db0: 2e 34 62 20 7b 64 61 74 65 28 27 32 30 30 33 2d  .4b {date('2003-
0dc0: 31 30 2d 32 32 27 2c 27 77 65 65 6b 64 61 79 20  10-22','weekday 
0dd0: 20 31 78 27 29 7d 20 4e 55 4c 4c 0a 64 61 74 65   1x')} NULL.date
0de0: 74 65 73 74 20 32 2e 34 63 20 7b 64 61 74 65 28  test 2.4c {date(
0df0: 27 32 30 30 33 2d 31 30 2d 32 32 27 2c 27 77 65  '2003-10-22','we
0e00: 65 6b 64 61 79 20 20 2d 31 27 29 7d 20 4e 55 4c  ekday  -1')} NUL
0e10: 4c 0a 64 61 74 65 74 65 73 74 20 32 2e 34 64 20  L.datetest 2.4d 
0e20: 7b 64 61 74 65 28 27 32 30 30 33 2d 31 30 2d 32  {date('2003-10-2
0e30: 32 27 2c 27 77 65 61 6b 64 61 79 20 20 31 78 27  2','weakday  1x'
0e40: 29 7d 20 4e 55 4c 4c 0a 64 61 74 65 74 65 73 74  )} NULL.datetest
0e50: 20 32 2e 34 65 20 7b 64 61 74 65 28 27 32 30 30   2.4e {date('200
0e60: 33 2d 31 30 2d 32 32 27 2c 27 77 65 65 6b 64 61  3-10-22','weekda
0e70: 79 20 27 29 7d 20 4e 55 4c 4c 0a 64 61 74 65 74  y ')} NULL.datet
0e80: 65 73 74 20 32 2e 35 20 7b 64 61 74 65 28 27 32  est 2.5 {date('2
0e90: 30 30 33 2d 31 30 2d 32 32 27 2c 27 77 65 65 6b  003-10-22','week
0ea0: 64 61 79 20 32 27 29 7d 20 32 30 30 33 2d 31 30  day 2')} 2003-10
0eb0: 2d 32 38 0a 64 61 74 65 74 65 73 74 20 32 2e 36  -28.datetest 2.6
0ec0: 20 7b 64 61 74 65 28 27 32 30 30 33 2d 31 30 2d   {date('2003-10-
0ed0: 32 32 27 2c 27 77 65 65 6b 64 61 79 20 33 27 29  22','weekday 3')
0ee0: 7d 20 32 30 30 33 2d 31 30 2d 32 32 0a 64 61 74  } 2003-10-22.dat
0ef0: 65 74 65 73 74 20 32 2e 37 20 7b 64 61 74 65 28  etest 2.7 {date(
0f00: 27 32 30 30 33 2d 31 30 2d 32 32 27 2c 27 77 65  '2003-10-22','we
0f10: 65 6b 64 61 79 20 34 27 29 7d 20 32 30 30 33 2d  ekday 4')} 2003-
0f20: 31 30 2d 32 33 0a 64 61 74 65 74 65 73 74 20 32  10-23.datetest 2
0f30: 2e 38 20 7b 64 61 74 65 28 27 32 30 30 33 2d 31  .8 {date('2003-1
0f40: 30 2d 32 32 27 2c 27 77 65 65 6b 64 61 79 20 35  0-22','weekday 5
0f50: 27 29 7d 20 32 30 30 33 2d 31 30 2d 32 34 0a 64  ')} 2003-10-24.d
0f60: 61 74 65 74 65 73 74 20 32 2e 39 20 7b 64 61 74  atetest 2.9 {dat
0f70: 65 28 27 32 30 30 33 2d 31 30 2d 32 32 27 2c 27  e('2003-10-22','
0f80: 77 65 65 6b 64 61 79 20 36 27 29 7d 20 32 30 30  weekday 6')} 200
0f90: 33 2d 31 30 2d 32 35 0a 64 61 74 65 74 65 73 74  3-10-25.datetest
0fa0: 20 32 2e 31 30 20 7b 64 61 74 65 28 27 32 30 30   2.10 {date('200
0fb0: 33 2d 31 30 2d 32 32 27 2c 27 77 65 65 6b 64 61  3-10-22','weekda
0fc0: 79 20 37 27 29 7d 20 4e 55 4c 4c 0a 64 61 74 65  y 7')} NULL.date
0fd0: 74 65 73 74 20 32 2e 31 31 20 7b 64 61 74 65 28  test 2.11 {date(
0fe0: 27 32 30 30 33 2d 31 30 2d 32 32 27 2c 27 77 65  '2003-10-22','we
0ff0: 65 6b 64 61 79 20 35 2e 35 27 29 7d 20 4e 55 4c  ekday 5.5')} NUL
1000: 4c 0a 64 61 74 65 74 65 73 74 20 32 2e 31 32 20  L.datetest 2.12 
1010: 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30 33 2d  {datetime('2003-
1020: 31 30 2d 32 32 20 31 32 3a 33 34 27 2c 27 77 65  10-22 12:34','we
1030: 65 6b 64 61 79 20 30 27 29 7d 20 7b 32 30 30 33  ekday 0')} {2003
1040: 2d 31 30 2d 32 36 20 31 32 3a 33 34 3a 30 30 7d  -10-26 12:34:00}
1050: 0a 64 61 74 65 74 65 73 74 20 32 2e 31 33 20 7b  .datetest 2.13 {
1060: 64 61 74 65 74 69 6d 65 28 27 32 30 30 33 2d 31  datetime('2003-1
1070: 30 2d 32 32 20 31 32 3a 33 34 27 2c 27 73 74 61  0-22 12:34','sta
1080: 72 74 20 6f 66 20 6d 6f 6e 74 68 27 29 7d 20 5c  rt of month')} \
1090: 0a 20 20 20 7b 32 30 30 33 2d 31 30 2d 30 31 20  .   {2003-10-01 
10a0: 30 30 3a 30 30 3a 30 30 7d 0a 64 61 74 65 74 65  00:00:00}.datete
10b0: 73 74 20 32 2e 31 34 20 7b 64 61 74 65 74 69 6d  st 2.14 {datetim
10c0: 65 28 27 32 30 30 33 2d 31 30 2d 32 32 20 31 32  e('2003-10-22 12
10d0: 3a 33 34 27 2c 27 73 74 61 72 74 20 6f 66 20 79  :34','start of y
10e0: 65 61 72 27 29 7d 20 5c 0a 20 20 20 7b 32 30 30  ear')} \.   {200
10f0: 33 2d 30 31 2d 30 31 20 30 30 3a 30 30 3a 30 30  3-01-01 00:00:00
1100: 7d 0a 64 61 74 65 74 65 73 74 20 32 2e 31 35 20  }.datetest 2.15 
1110: 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30 33 2d  {datetime('2003-
1120: 31 30 2d 32 32 20 31 32 3a 33 34 27 2c 27 73 74  10-22 12:34','st
1130: 61 72 74 20 6f 66 20 64 61 79 27 29 7d 20 5c 0a  art of day')} \.
1140: 20 20 20 7b 32 30 30 33 2d 31 30 2d 32 32 20 30     {2003-10-22 0
1150: 30 3a 30 30 3a 30 30 7d 0a 64 61 74 65 74 65 73  0:00:00}.datetes
1160: 74 20 32 2e 31 35 61 20 7b 64 61 74 65 74 69 6d  t 2.15a {datetim
1170: 65 28 27 32 30 30 33 2d 31 30 2d 32 32 20 31 32  e('2003-10-22 12
1180: 3a 33 34 27 2c 27 73 74 61 72 74 20 6f 66 27 29  :34','start of')
1190: 7d 20 4e 55 4c 4c 0a 64 61 74 65 74 65 73 74 20  } NULL.datetest 
11a0: 32 2e 31 35 62 20 7b 64 61 74 65 74 69 6d 65 28  2.15b {datetime(
11b0: 27 32 30 30 33 2d 31 30 2d 32 32 20 31 32 3a 33  '2003-10-22 12:3
11c0: 34 27 2c 27 73 74 61 72 74 20 6f 66 20 62 6f 67  4','start of bog
11d0: 75 73 27 29 7d 20 4e 55 4c 4c 0a 64 61 74 65 74  us')} NULL.datet
11e0: 65 73 74 20 32 2e 31 36 20 74 69 6d 65 28 27 31  est 2.16 time('1
11f0: 32 3a 33 34 3a 35 36 2e 34 33 27 29 20 31 32 3a  2:34:56.43') 12:
1200: 33 34 3a 35 36 0a 64 61 74 65 74 65 73 74 20 32  34:56.datetest 2
1210: 2e 31 37 20 7b 64 61 74 65 74 69 6d 65 28 27 32  .17 {datetime('2
1220: 30 30 33 2d 31 30 2d 32 32 20 31 32 3a 33 34 27  003-10-22 12:34'
1230: 2c 27 31 20 64 61 79 27 29 7d 20 7b 32 30 30 33  ,'1 day')} {2003
1240: 2d 31 30 2d 32 33 20 31 32 3a 33 34 3a 30 30 7d  -10-23 12:34:00}
1250: 0a 64 61 74 65 74 65 73 74 20 32 2e 31 38 20 7b  .datetest 2.18 {
1260: 64 61 74 65 74 69 6d 65 28 27 32 30 30 33 2d 31  datetime('2003-1
1270: 30 2d 32 32 20 31 32 3a 33 34 27 2c 27 2b 31 20  0-22 12:34','+1 
1280: 64 61 79 27 29 7d 20 7b 32 30 30 33 2d 31 30 2d  day')} {2003-10-
1290: 32 33 20 31 32 3a 33 34 3a 30 30 7d 0a 64 61 74  23 12:34:00}.dat
12a0: 65 74 65 73 74 20 32 2e 31 39 20 7b 64 61 74 65  etest 2.19 {date
12b0: 74 69 6d 65 28 27 32 30 30 33 2d 31 30 2d 32 32  time('2003-10-22
12c0: 20 31 32 3a 33 34 27 2c 27 2b 31 2e 32 35 20 64   12:34','+1.25 d
12d0: 61 79 27 29 7d 20 7b 32 30 30 33 2d 31 30 2d 32  ay')} {2003-10-2
12e0: 33 20 31 38 3a 33 34 3a 30 30 7d 0a 64 61 74 65  3 18:34:00}.date
12f0: 74 65 73 74 20 32 2e 32 30 20 7b 64 61 74 65 74  test 2.20 {datet
1300: 69 6d 65 28 27 32 30 30 33 2d 31 30 2d 32 32 20  ime('2003-10-22 
1310: 31 32 3a 33 34 27 2c 27 2d 31 2e 30 20 64 61 79  12:34','-1.0 day
1320: 27 29 7d 20 7b 32 30 30 33 2d 31 30 2d 32 31 20  ')} {2003-10-21 
1330: 31 32 3a 33 34 3a 30 30 7d 0a 64 61 74 65 74 65  12:34:00}.datete
1340: 73 74 20 32 2e 32 31 20 7b 64 61 74 65 74 69 6d  st 2.21 {datetim
1350: 65 28 27 32 30 30 33 2d 31 30 2d 32 32 20 31 32  e('2003-10-22 12
1360: 3a 33 34 27 2c 27 31 20 6d 6f 6e 74 68 27 29 7d  :34','1 month')}
1370: 20 7b 32 30 30 33 2d 31 31 2d 32 32 20 31 32 3a   {2003-11-22 12:
1380: 33 34 3a 30 30 7d 0a 64 61 74 65 74 65 73 74 20  34:00}.datetest 
1390: 32 2e 32 32 20 7b 64 61 74 65 74 69 6d 65 28 27  2.22 {datetime('
13a0: 32 30 30 33 2d 31 30 2d 32 32 20 31 32 3a 33 34  2003-10-22 12:34
13b0: 27 2c 27 31 31 20 6d 6f 6e 74 68 27 29 7d 20 7b  ','11 month')} {
13c0: 32 30 30 34 2d 30 39 2d 32 32 20 31 32 3a 33 34  2004-09-22 12:34
13d0: 3a 30 30 7d 0a 64 61 74 65 74 65 73 74 20 32 2e  :00}.datetest 2.
13e0: 32 33 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30  23 {datetime('20
13f0: 30 33 2d 31 30 2d 32 32 20 31 32 3a 33 34 27 2c  03-10-22 12:34',
1400: 27 2d 31 33 20 6d 6f 6e 74 68 27 29 7d 20 7b 32  '-13 month')} {2
1410: 30 30 32 2d 30 39 2d 32 32 20 31 32 3a 33 34 3a  002-09-22 12:34:
1420: 30 30 7d 0a 64 61 74 65 74 65 73 74 20 32 2e 32  00}.datetest 2.2
1430: 34 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30  4 {datetime('200
1440: 33 2d 31 30 2d 32 32 20 31 32 3a 33 34 27 2c 27  3-10-22 12:34','
1450: 31 2e 35 20 6d 6f 6e 74 68 73 27 29 7d 20 7b 32  1.5 months')} {2
1460: 30 30 33 2d 31 32 2d 30 37 20 31 32 3a 33 34 3a  003-12-07 12:34:
1470: 30 30 7d 0a 64 61 74 65 74 65 73 74 20 32 2e 32  00}.datetest 2.2
1480: 35 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30  5 {datetime('200
1490: 33 2d 31 30 2d 32 32 20 31 32 3a 33 34 27 2c 27  3-10-22 12:34','
14a0: 2d 35 20 79 65 61 72 73 27 29 7d 20 7b 31 39 39  -5 years')} {199
14b0: 38 2d 31 30 2d 32 32 20 31 32 3a 33 34 3a 30 30  8-10-22 12:34:00
14c0: 7d 0a 64 61 74 65 74 65 73 74 20 32 2e 32 36 20  }.datetest 2.26 
14d0: 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30 33 2d  {datetime('2003-
14e0: 31 30 2d 32 32 20 31 32 3a 33 34 27 2c 27 2b 31  10-22 12:34','+1
14f0: 30 2e 35 20 6d 69 6e 75 74 65 73 27 29 7d 20 5c  0.5 minutes')} \
1500: 0a 20 20 7b 32 30 30 33 2d 31 30 2d 32 32 20 31  .  {2003-10-22 1
1510: 32 3a 34 34 3a 33 30 7d 0a 64 61 74 65 74 65 73  2:44:30}.datetes
1520: 74 20 32 2e 32 37 20 7b 64 61 74 65 74 69 6d 65  t 2.27 {datetime
1530: 28 27 32 30 30 33 2d 31 30 2d 32 32 20 31 32 3a  ('2003-10-22 12:
1540: 33 34 27 2c 27 2d 31 2e 32 35 20 68 6f 75 72 73  34','-1.25 hours
1550: 27 29 7d 20 5c 0a 20 20 7b 32 30 30 33 2d 31 30  ')} \.  {2003-10
1560: 2d 32 32 20 31 31 3a 31 39 3a 30 30 7d 0a 64 61  -22 11:19:00}.da
1570: 74 65 74 65 73 74 20 32 2e 32 38 20 7b 64 61 74  tetest 2.28 {dat
1580: 65 74 69 6d 65 28 27 32 30 30 33 2d 31 30 2d 32  etime('2003-10-2
1590: 32 20 31 32 3a 33 34 27 2c 27 31 31 2e 32 35 20  2 12:34','11.25 
15a0: 73 65 63 6f 6e 64 73 27 29 7d 20 5c 0a 20 20 7b  seconds')} \.  {
15b0: 32 30 30 33 2d 31 30 2d 32 32 20 31 32 3a 33 34  2003-10-22 12:34
15c0: 3a 31 31 7d 0a 64 61 74 65 74 65 73 74 20 32 2e  :11}.datetest 2.
15d0: 32 39 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30  29 {datetime('20
15e0: 30 33 2d 31 30 2d 32 32 20 31 32 3a 32 34 27 2c  03-10-22 12:24',
15f0: 27 2b 35 20 62 6f 67 75 73 27 29 7d 20 4e 55 4c  '+5 bogus')} NUL
1600: 4c 0a 64 61 74 65 74 65 73 74 20 32 2e 33 30 20  L.datetest 2.30 
1610: 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30 33 2d  {datetime('2003-
1620: 31 30 2d 32 32 20 31 32 3a 32 34 27 2c 27 2b 2b  10-22 12:24','++
1630: 2b 27 29 7d 20 4e 55 4c 4c 0a 64 61 74 65 74 65  +')} NULL.datete
1640: 73 74 20 32 2e 33 31 20 7b 64 61 74 65 74 69 6d  st 2.31 {datetim
1650: 65 28 27 32 30 30 33 2d 31 30 2d 32 32 20 31 32  e('2003-10-22 12
1660: 3a 32 34 27 2c 27 2b 31 32 2e 33 65 34 20 66 65  :24','+12.3e4 fe
1670: 6d 74 6f 73 65 63 6f 6e 64 73 27 29 7d 20 4e 55  mtoseconds')} NU
1680: 4c 4c 0a 64 61 74 65 74 65 73 74 20 32 2e 33 32  LL.datetest 2.32
1690: 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30 33   {datetime('2003
16a0: 2d 31 30 2d 32 32 20 31 32 3a 32 34 27 2c 27 2b  -10-22 12:24','+
16b0: 31 32 2e 33 65 34 20 75 53 27 29 7d 20 4e 55 4c  12.3e4 uS')} NUL
16c0: 4c 0a 64 61 74 65 74 65 73 74 20 32 2e 33 33 20  L.datetest 2.33 
16d0: 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30 33 2d  {datetime('2003-
16e0: 31 30 2d 32 32 20 31 32 3a 32 34 27 2c 27 2b 31  10-22 12:24','+1
16f0: 20 61 62 63 27 29 7d 20 4e 55 4c 4c 0a 64 61 74   abc')} NULL.dat
1700: 65 74 65 73 74 20 32 2e 33 34 20 7b 64 61 74 65  etest 2.34 {date
1710: 74 69 6d 65 28 27 32 30 30 33 2d 31 30 2d 32 32  time('2003-10-22
1720: 20 31 32 3a 32 34 27 2c 27 2b 31 20 61 62 63 64   12:24','+1 abcd
1730: 27 29 7d 20 4e 55 4c 4c 0a 64 61 74 65 74 65 73  ')} NULL.datetes
1740: 74 20 32 2e 33 35 20 7b 64 61 74 65 74 69 6d 65  t 2.35 {datetime
1750: 28 27 32 30 30 33 2d 31 30 2d 32 32 20 31 32 3a  ('2003-10-22 12:
1760: 32 34 27 2c 27 2b 31 20 61 62 63 64 65 27 29 7d  24','+1 abcde')}
1770: 20 4e 55 4c 4c 0a 64 61 74 65 74 65 73 74 20 32   NULL.datetest 2
1780: 2e 33 36 20 7b 64 61 74 65 74 69 6d 65 28 27 32  .36 {datetime('2
1790: 30 30 33 2d 31 30 2d 32 32 20 31 32 3a 32 34 27  003-10-22 12:24'
17a0: 2c 27 2b 31 20 61 62 63 64 65 66 27 29 7d 20 4e  ,'+1 abcdef')} N
17b0: 55 4c 4c 0a 64 61 74 65 74 65 73 74 20 32 2e 33  ULL.datetest 2.3
17c0: 37 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30  7 {datetime('200
17d0: 33 2d 31 30 2d 32 32 20 31 32 3a 32 34 27 2c 27  3-10-22 12:24','
17e0: 2b 31 20 61 62 63 64 65 66 67 27 29 7d 20 4e 55  +1 abcdefg')} NU
17f0: 4c 4c 0a 64 61 74 65 74 65 73 74 20 32 2e 33 38  LL.datetest 2.38
1800: 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30 33   {datetime('2003
1810: 2d 31 30 2d 32 32 20 31 32 3a 32 34 27 2c 27 2b  -10-22 12:24','+
1820: 31 20 61 62 63 64 65 66 67 68 27 29 7d 20 4e 55  1 abcdefgh')} NU
1830: 4c 4c 0a 64 61 74 65 74 65 73 74 20 32 2e 33 39  LL.datetest 2.39
1840: 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30 33   {datetime('2003
1850: 2d 31 30 2d 32 32 20 31 32 3a 32 34 27 2c 27 2b  -10-22 12:24','+
1860: 31 20 61 62 63 64 65 66 67 68 69 27 29 7d 20 4e  1 abcdefghi')} N
1870: 55 4c 4c 0a 73 65 74 20 73 71 6c 69 74 65 5f 63  ULL.set sqlite_c
1880: 75 72 72 65 6e 74 5f 74 69 6d 65 20 31 31 39 39  urrent_time 1199
1890: 32 34 33 30 34 35 0a 64 61 74 65 74 65 73 74 20  243045.datetest 
18a0: 32 2e 34 30 20 7b 64 61 74 65 74 69 6d 65 28 29  2.40 {datetime()
18b0: 7d 20 7b 32 30 30 38 2d 30 31 2d 30 32 20 30 33  } {2008-01-02 03
18c0: 3a 30 34 3a 30 35 7d 0a 73 65 74 20 73 71 6c 69  :04:05}.set sqli
18d0: 74 65 5f 63 75 72 72 65 6e 74 5f 74 69 6d 65 20  te_current_time 
18e0: 30 0a 64 61 74 65 74 65 73 74 20 32 2e 34 31 20  0.datetest 2.41 
18f0: 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30 33 2d  {datetime('2003-
1900: 31 30 2d 32 32 20 31 32 3a 32 34 27 2c 27 32 33  10-22 12:24','23
1910: 20 73 65 63 6f 6e 64 73 27 29 7d 20 7b 32 30 30   seconds')} {200
1920: 33 2d 31 30 2d 32 32 20 31 32 3a 32 34 3a 32 33  3-10-22 12:24:23
1930: 7d 0a 64 61 74 65 74 65 73 74 20 32 2e 34 32 20  }.datetest 2.42 
1940: 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30 33 2d  {datetime('2003-
1950: 31 30 2d 32 32 20 31 32 3a 32 34 27 2c 27 33 34  10-22 12:24','34
1960: 35 20 73 65 63 6f 6e 64 27 29 7d 20 7b 32 30 30  5 second')} {200
1970: 33 2d 31 30 2d 32 32 20 31 32 3a 32 39 3a 34 35  3-10-22 12:29:45
1980: 7d 0a 64 61 74 65 74 65 73 74 20 32 2e 34 33 20  }.datetest 2.43 
1990: 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30 33 2d  {datetime('2003-
19a0: 31 30 2d 32 32 20 31 32 3a 32 34 27 2c 27 34 20  10-22 12:24','4 
19b0: 73 65 63 6f 6e 64 27 29 7d 20 7b 32 30 30 33 2d  second')} {2003-
19c0: 31 30 2d 32 32 20 31 32 3a 32 34 3a 30 34 7d 0a  10-22 12:24:04}.
19d0: 64 61 74 65 74 65 73 74 20 32 2e 34 34 20 7b 64  datetest 2.44 {d
19e0: 61 74 65 74 69 6d 65 28 27 32 30 30 33 2d 31 30  atetime('2003-10
19f0: 2d 32 32 20 31 32 3a 32 34 27 2c 27 35 36 20 73  -22 12:24','56 s
1a00: 65 63 6f 6e 64 27 29 7d 20 7b 32 30 30 33 2d 31  econd')} {2003-1
1a10: 30 2d 32 32 20 31 32 3a 32 34 3a 35 36 7d 0a 64  0-22 12:24:56}.d
1a20: 61 74 65 74 65 73 74 20 32 2e 34 35 20 7b 64 61  atetest 2.45 {da
1a30: 74 65 74 69 6d 65 28 27 32 30 30 33 2d 31 30 2d  tetime('2003-10-
1a40: 32 32 20 31 32 3a 32 34 27 2c 27 36 30 20 73 65  22 12:24','60 se
1a50: 63 6f 6e 64 27 29 7d 20 7b 32 30 30 33 2d 31 30  cond')} {2003-10
1a60: 2d 32 32 20 31 32 3a 32 35 3a 30 30 7d 0a 64 61  -22 12:25:00}.da
1a70: 74 65 74 65 73 74 20 32 2e 34 36 20 7b 64 61 74  tetest 2.46 {dat
1a80: 65 74 69 6d 65 28 27 32 30 30 33 2d 31 30 2d 32  etime('2003-10-2
1a90: 32 20 31 32 3a 32 34 27 2c 27 37 30 20 73 65 63  2 12:24','70 sec
1aa0: 6f 6e 64 27 29 7d 20 7b 32 30 30 33 2d 31 30 2d  ond')} {2003-10-
1ab0: 32 32 20 31 32 3a 32 35 3a 31 30 7d 0a 64 61 74  22 12:25:10}.dat
1ac0: 65 74 65 73 74 20 32 2e 34 37 20 7b 64 61 74 65  etest 2.47 {date
1ad0: 74 69 6d 65 28 27 32 30 30 33 2d 31 30 2d 32 32  time('2003-10-22
1ae0: 20 31 32 3a 32 34 27 2c 27 38 2e 36 20 73 65 63   12:24','8.6 sec
1af0: 6f 6e 64 73 27 29 7d 20 7b 32 30 30 33 2d 31 30  onds')} {2003-10
1b00: 2d 32 32 20 31 32 3a 32 34 3a 30 38 7d 0a 64 61  -22 12:24:08}.da
1b10: 74 65 74 65 73 74 20 32 2e 34 38 20 7b 64 61 74  tetest 2.48 {dat
1b20: 65 74 69 6d 65 28 27 32 30 30 33 2d 31 30 2d 32  etime('2003-10-2
1b30: 32 20 31 32 3a 32 34 27 2c 27 39 2e 34 20 73 65  2 12:24','9.4 se
1b40: 63 6f 6e 64 27 29 7d 20 7b 32 30 30 33 2d 31 30  cond')} {2003-10
1b50: 2d 32 32 20 31 32 3a 32 34 3a 30 39 7d 0a 64 61  -22 12:24:09}.da
1b60: 74 65 74 65 73 74 20 32 2e 34 39 20 7b 64 61 74  tetest 2.49 {dat
1b70: 65 74 69 6d 65 28 27 32 30 30 33 2d 31 30 2d 32  etime('2003-10-2
1b80: 32 20 31 32 3a 32 34 27 2c 27 30 30 30 30 20 73  2 12:24','0000 s
1b90: 65 63 6f 6e 64 27 29 7d 20 7b 32 30 30 33 2d 31  econd')} {2003-1
1ba0: 30 2d 32 32 20 31 32 3a 32 34 3a 30 30 7d 0a 64  0-22 12:24:00}.d
1bb0: 61 74 65 74 65 73 74 20 32 2e 35 30 20 7b 64 61  atetest 2.50 {da
1bc0: 74 65 74 69 6d 65 28 27 32 30 30 33 2d 31 30 2d  tetime('2003-10-
1bd0: 32 32 20 31 32 3a 32 34 27 2c 27 30 30 30 31 20  22 12:24','0001 
1be0: 73 65 63 6f 6e 64 27 29 7d 20 7b 32 30 30 33 2d  second')} {2003-
1bf0: 31 30 2d 32 32 20 31 32 3a 32 34 3a 30 31 7d 0a  10-22 12:24:01}.
1c00: 64 61 74 65 74 65 73 74 20 32 2e 35 31 20 7b 64  datetest 2.51 {d
1c10: 61 74 65 74 69 6d 65 28 27 32 30 30 33 2d 31 30  atetime('2003-10
1c20: 2d 32 32 20 31 32 3a 32 34 27 2c 27 6e 6f 6e 73  -22 12:24','nons
1c30: 65 6e 73 65 27 29 7d 20 4e 55 4c 4c 0a 0a 64 61  ense')} NULL..da
1c40: 74 65 74 65 73 74 20 33 2e 31 20 7b 73 74 72 66  tetest 3.1 {strf
1c50: 74 69 6d 65 28 27 25 64 27 2c 27 32 30 30 33 2d  time('%d','2003-
1c60: 31 30 2d 33 31 20 31 32 3a 33 34 3a 35 36 2e 34  10-31 12:34:56.4
1c70: 33 32 27 29 7d 20 33 31 0a 64 61 74 65 74 65 73  32')} 31.datetes
1c80: 74 20 33 2e 32 2e 31 20 7b 73 74 72 66 74 69 6d  t 3.2.1 {strftim
1c90: 65 28 27 70 72 65 25 66 70 6f 73 74 27 2c 27 32  e('pre%fpost','2
1ca0: 30 30 33 2d 31 30 2d 33 31 20 31 32 3a 33 34 3a  003-10-31 12:34:
1cb0: 35 36 2e 34 33 32 27 29 7d 20 70 72 65 35 36 2e  56.432')} pre56.
1cc0: 34 33 32 70 6f 73 74 0a 64 61 74 65 74 65 73 74  432post.datetest
1cd0: 20 33 2e 32 2e 32 20 7b 73 74 72 66 74 69 6d 65   3.2.2 {strftime
1ce0: 28 27 25 66 27 2c 27 32 30 30 33 2d 31 30 2d 33  ('%f','2003-10-3
1cf0: 31 20 31 32 3a 33 34 3a 35 39 2e 39 39 39 39 39  1 12:34:59.99999
1d00: 39 39 27 29 7d 20 35 39 2e 39 39 39 0a 64 61 74  99')} 59.999.dat
1d10: 65 74 65 73 74 20 33 2e 33 20 7b 73 74 72 66 74  etest 3.3 {strft
1d20: 69 6d 65 28 27 25 48 27 2c 27 32 30 30 33 2d 31  ime('%H','2003-1
1d30: 30 2d 33 31 20 31 32 3a 33 34 3a 35 36 2e 34 33  0-31 12:34:56.43
1d40: 32 27 29 7d 20 31 32 0a 64 61 74 65 74 65 73 74  2')} 12.datetest
1d50: 20 33 2e 34 20 7b 73 74 72 66 74 69 6d 65 28 27   3.4 {strftime('
1d60: 25 6a 27 2c 27 32 30 30 33 2d 31 30 2d 33 31 20  %j','2003-10-31 
1d70: 31 32 3a 33 34 3a 35 36 2e 34 33 32 27 29 7d 20  12:34:56.432')} 
1d80: 33 30 34 0a 64 61 74 65 74 65 73 74 20 33 2e 35  304.datetest 3.5
1d90: 20 7b 73 74 72 66 74 69 6d 65 28 27 25 4a 27 2c   {strftime('%J',
1da0: 27 32 30 30 33 2d 31 30 2d 33 31 20 31 32 3a 33  '2003-10-31 12:3
1db0: 34 3a 35 36 2e 34 33 32 27 29 7d 20 32 34 35 32  4:56.432')} 2452
1dc0: 39 34 34 2e 30 32 34 32 36 34 32 35 39 0a 64 61  944.024264259.da
1dd0: 74 65 74 65 73 74 20 33 2e 36 20 7b 73 74 72 66  tetest 3.6 {strf
1de0: 74 69 6d 65 28 27 25 6d 27 2c 27 32 30 30 33 2d  time('%m','2003-
1df0: 31 30 2d 33 31 20 31 32 3a 33 34 3a 35 36 2e 34  10-31 12:34:56.4
1e00: 33 32 27 29 7d 20 31 30 0a 64 61 74 65 74 65 73  32')} 10.datetes
1e10: 74 20 33 2e 37 20 7b 73 74 72 66 74 69 6d 65 28  t 3.7 {strftime(
1e20: 27 25 4d 27 2c 27 32 30 30 33 2d 31 30 2d 33 31  '%M','2003-10-31
1e30: 20 31 32 3a 33 34 3a 35 36 2e 34 33 32 27 29 7d   12:34:56.432')}
1e40: 20 33 34 0a 64 61 74 65 74 65 73 74 20 33 2e 38   34.datetest 3.8
1e50: 2e 31 20 7b 73 74 72 66 74 69 6d 65 28 27 25 73  .1 {strftime('%s
1e60: 27 2c 27 32 30 30 33 2d 31 30 2d 33 31 20 31 32  ','2003-10-31 12
1e70: 3a 33 34 3a 35 36 2e 34 33 32 27 29 7d 20 31 30  :34:56.432')} 10
1e80: 36 37 36 30 33 36 39 36 0a 64 61 74 65 74 65 73  67603696.datetes
1e90: 74 20 33 2e 38 2e 32 20 7b 73 74 72 66 74 69 6d  t 3.8.2 {strftim
1ea0: 65 28 27 25 73 27 2c 27 32 30 33 38 2d 30 31 2d  e('%s','2038-01-
1eb0: 31 39 20 30 33 3a 31 34 3a 30 37 27 29 7d 20 32  19 03:14:07')} 2
1ec0: 31 34 37 34 38 33 36 34 37 0a 64 61 74 65 74 65  147483647.datete
1ed0: 73 74 20 33 2e 38 2e 33 20 7b 73 74 72 66 74 69  st 3.8.3 {strfti
1ee0: 6d 65 28 27 25 73 27 2c 27 32 30 33 38 2d 30 31  me('%s','2038-01
1ef0: 2d 31 39 20 30 33 3a 31 34 3a 30 38 27 29 7d 20  -19 03:14:08')} 
1f00: 32 31 34 37 34 38 33 36 34 38 0a 64 61 74 65 74  2147483648.datet
1f10: 65 73 74 20 33 2e 38 2e 34 20 7b 73 74 72 66 74  est 3.8.4 {strft
1f20: 69 6d 65 28 27 25 73 27 2c 27 32 32 30 31 2d 30  ime('%s','2201-0
1f30: 34 2d 30 39 20 31 32 3a 30 30 3a 30 30 27 29 7d  4-09 12:00:00')}
1f40: 20 37 32 39 38 31 36 34 38 30 30 0a 64 61 74 65   7298164800.date
1f50: 74 65 73 74 20 33 2e 38 2e 35 20 7b 73 74 72 66  test 3.8.5 {strf
1f60: 74 69 6d 65 28 27 25 73 27 2c 27 39 39 39 39 2d  time('%s','9999-
1f70: 31 32 2d 33 31 20 32 33 3a 35 39 3a 35 39 27 29  12-31 23:59:59')
1f80: 7d 20 32 35 33 34 30 32 33 30 30 37 39 39 0a 64  } 253402300799.d
1f90: 61 74 65 74 65 73 74 20 33 2e 38 2e 36 20 7b 73  atetest 3.8.6 {s
1fa0: 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27 31 39  trftime('%s','19
1fb0: 36 39 2d 31 32 2d 33 31 20 32 33 3a 35 39 3a 35  69-12-31 23:59:5
1fc0: 39 27 29 7d 20 2d 31 0a 64 61 74 65 74 65 73 74  9')} -1.datetest
1fd0: 20 33 2e 38 2e 37 20 7b 73 74 72 66 74 69 6d 65   3.8.7 {strftime
1fe0: 28 27 25 73 27 2c 27 31 39 30 31 2d 31 32 2d 31  ('%s','1901-12-1
1ff0: 33 20 32 30 3a 34 35 3a 35 32 27 29 7d 20 2d 32  3 20:45:52')} -2
2000: 31 34 37 34 38 33 36 34 38 0a 64 61 74 65 74 65  147483648.datete
2010: 73 74 20 33 2e 38 2e 38 20 7b 73 74 72 66 74 69  st 3.8.8 {strfti
2020: 6d 65 28 27 25 73 27 2c 27 31 39 30 31 2d 31 32  me('%s','1901-12
2030: 2d 31 33 20 32 30 3a 34 35 3a 35 31 27 29 7d 20  -13 20:45:51')} 
2040: 2d 32 31 34 37 34 38 33 36 34 39 0a 64 61 74 65  -2147483649.date
2050: 74 65 73 74 20 33 2e 38 2e 39 20 7b 73 74 72 66  test 3.8.9 {strf
2060: 74 69 6d 65 28 27 25 73 27 2c 27 31 37 37 36 2d  time('%s','1776-
2070: 30 37 2d 30 34 20 30 30 3a 30 30 3a 30 30 27 29  07-04 00:00:00')
2080: 7d 20 2d 36 31 30 36 30 36 30 38 30 30 0a 64 61  } -6106060800.da
2090: 74 65 74 65 73 74 20 33 2e 39 20 7b 73 74 72 66  tetest 3.9 {strf
20a0: 74 69 6d 65 28 27 25 53 27 2c 27 32 30 30 33 2d  time('%S','2003-
20b0: 31 30 2d 33 31 20 31 32 3a 33 34 3a 35 36 2e 34  10-31 12:34:56.4
20c0: 33 32 27 29 7d 20 35 36 0a 64 61 74 65 74 65 73  32')} 56.datetes
20d0: 74 20 33 2e 31 30 20 7b 73 74 72 66 74 69 6d 65  t 3.10 {strftime
20e0: 28 27 25 77 27 2c 27 32 30 30 33 2d 31 30 2d 33  ('%w','2003-10-3
20f0: 31 20 31 32 3a 33 34 3a 35 36 2e 34 33 32 27 29  1 12:34:56.432')
2100: 7d 20 35 0a 64 61 74 65 74 65 73 74 20 33 2e 31  } 5.datetest 3.1
2110: 31 2e 31 20 7b 73 74 72 66 74 69 6d 65 28 27 25  1.1 {strftime('%
2120: 57 27 2c 27 32 30 30 33 2d 31 30 2d 33 31 20 31  W','2003-10-31 1
2130: 32 3a 33 34 3a 35 36 2e 34 33 32 27 29 7d 20 34  2:34:56.432')} 4
2140: 33 0a 64 61 74 65 74 65 73 74 20 33 2e 31 31 2e  3.datetest 3.11.
2150: 32 20 7b 73 74 72 66 74 69 6d 65 28 27 25 57 27  2 {strftime('%W'
2160: 2c 27 32 30 30 34 2d 30 31 2d 30 31 27 29 7d 20  ,'2004-01-01')} 
2170: 30 30 0a 64 61 74 65 74 65 73 74 20 33 2e 31 31  00.datetest 3.11
2180: 2e 33 20 7b 73 74 72 66 74 69 6d 65 28 27 25 57  .3 {strftime('%W
2190: 27 2c 27 32 30 30 34 2d 30 31 2d 30 32 27 29 7d  ','2004-01-02')}
21a0: 20 30 30 0a 64 61 74 65 74 65 73 74 20 33 2e 31   00.datetest 3.1
21b0: 31 2e 34 20 7b 73 74 72 66 74 69 6d 65 28 27 25  1.4 {strftime('%
21c0: 57 27 2c 27 32 30 30 34 2d 30 31 2d 30 33 27 29  W','2004-01-03')
21d0: 7d 20 30 30 0a 64 61 74 65 74 65 73 74 20 33 2e  } 00.datetest 3.
21e0: 31 31 2e 35 20 7b 73 74 72 66 74 69 6d 65 28 27  11.5 {strftime('
21f0: 61 62 63 25 57 78 79 7a 27 2c 27 32 30 30 34 2d  abc%Wxyz','2004-
2200: 30 31 2d 30 34 27 29 7d 20 61 62 63 30 30 78 79  01-04')} abc00xy
2210: 7a 0a 64 61 74 65 74 65 73 74 20 33 2e 31 31 2e  z.datetest 3.11.
2220: 36 20 7b 73 74 72 66 74 69 6d 65 28 27 25 57 27  6 {strftime('%W'
2230: 2c 27 32 30 30 34 2d 30 31 2d 30 35 27 29 7d 20  ,'2004-01-05')} 
2240: 30 31 0a 64 61 74 65 74 65 73 74 20 33 2e 31 31  01.datetest 3.11
2250: 2e 37 20 7b 73 74 72 66 74 69 6d 65 28 27 25 57  .7 {strftime('%W
2260: 27 2c 27 32 30 30 34 2d 30 31 2d 30 36 27 29 7d  ','2004-01-06')}
2270: 20 30 31 0a 64 61 74 65 74 65 73 74 20 33 2e 31   01.datetest 3.1
2280: 31 2e 38 20 7b 73 74 72 66 74 69 6d 65 28 27 25  1.8 {strftime('%
2290: 57 27 2c 27 32 30 30 34 2d 30 31 2d 30 37 27 29  W','2004-01-07')
22a0: 7d 20 30 31 0a 64 61 74 65 74 65 73 74 20 33 2e  } 01.datetest 3.
22b0: 31 31 2e 39 20 7b 73 74 72 66 74 69 6d 65 28 27  11.9 {strftime('
22c0: 25 57 27 2c 27 32 30 30 34 2d 30 31 2d 30 38 27  %W','2004-01-08'
22d0: 29 7d 20 30 31 0a 64 61 74 65 74 65 73 74 20 33  )} 01.datetest 3
22e0: 2e 31 31 2e 31 30 20 7b 73 74 72 66 74 69 6d 65  .11.10 {strftime
22f0: 28 27 25 57 27 2c 27 32 30 30 34 2d 30 31 2d 30  ('%W','2004-01-0
2300: 39 27 29 7d 20 30 31 0a 64 61 74 65 74 65 73 74  9')} 01.datetest
2310: 20 33 2e 31 31 2e 31 31 20 7b 73 74 72 66 74 69   3.11.11 {strfti
2320: 6d 65 28 27 25 57 27 2c 27 32 30 30 34 2d 30 37  me('%W','2004-07
2330: 2d 31 38 27 29 7d 20 32 38 0a 64 61 74 65 74 65  -18')} 28.datete
2340: 73 74 20 33 2e 31 31 2e 31 32 20 7b 73 74 72 66  st 3.11.12 {strf
2350: 74 69 6d 65 28 27 25 57 27 2c 27 32 30 30 34 2d  time('%W','2004-
2360: 31 32 2d 33 31 27 29 7d 20 35 32 0a 64 61 74 65  12-31')} 52.date
2370: 74 65 73 74 20 33 2e 31 31 2e 31 33 20 7b 73 74  test 3.11.13 {st
2380: 72 66 74 69 6d 65 28 27 25 57 27 2c 27 32 30 30  rftime('%W','200
2390: 37 2d 31 32 2d 33 31 27 29 7d 20 35 33 0a 64 61  7-12-31')} 53.da
23a0: 74 65 74 65 73 74 20 33 2e 31 31 2e 31 34 20 7b  tetest 3.11.14 {
23b0: 73 74 72 66 74 69 6d 65 28 27 25 57 27 2c 27 32  strftime('%W','2
23c0: 30 30 37 2d 30 31 2d 30 31 27 29 7d 20 30 31 0a  007-01-01')} 01.
23d0: 64 61 74 65 74 65 73 74 20 33 2e 31 31 2e 31 35  datetest 3.11.15
23e0: 20 7b 73 74 72 66 74 69 6d 65 28 27 25 57 20 25   {strftime('%W %
23f0: 6a 27 2c 32 34 35 34 31 30 39 2e 30 34 31 34 30  j',2454109.04140
2400: 39 37 30 29 7d 20 7b 30 32 20 30 30 38 7d 0a 64  970)} {02 008}.d
2410: 61 74 65 74 65 73 74 20 33 2e 31 31 2e 31 36 20  atetest 3.11.16 
2420: 7b 73 74 72 66 74 69 6d 65 28 27 25 57 20 25 6a  {strftime('%W %j
2430: 27 2c 32 34 35 34 31 30 39 2e 30 34 31 34 30 39  ',2454109.041409
2440: 37 31 29 7d 20 7b 30 32 20 30 30 38 7d 0a 64 61  71)} {02 008}.da
2450: 74 65 74 65 73 74 20 33 2e 31 31 2e 31 37 20 7b  tetest 3.11.17 {
2460: 73 74 72 66 74 69 6d 65 28 27 25 57 20 25 6a 27  strftime('%W %j'
2470: 2c 32 34 35 34 31 30 39 2e 30 34 31 34 30 39 37  ,2454109.0414097
2480: 32 29 7d 20 7b 30 32 20 30 30 38 7d 0a 64 61 74  2)} {02 008}.dat
2490: 65 74 65 73 74 20 33 2e 31 31 2e 31 38 20 7b 73  etest 3.11.18 {s
24a0: 74 72 66 74 69 6d 65 28 27 25 57 20 25 6a 27 2c  trftime('%W %j',
24b0: 32 34 35 34 31 30 39 2e 30 34 31 34 30 39 37 33  2454109.04140973
24c0: 29 7d 20 7b 30 32 20 30 30 38 7d 0a 64 61 74 65  )} {02 008}.date
24d0: 74 65 73 74 20 33 2e 31 31 2e 31 39 20 7b 73 74  test 3.11.19 {st
24e0: 72 66 74 69 6d 65 28 27 25 57 20 25 6a 27 2c 32  rftime('%W %j',2
24f0: 34 35 34 31 30 39 2e 30 34 31 34 30 39 37 34 29  454109.04140974)
2500: 7d 20 7b 30 32 20 30 30 38 7d 0a 64 61 74 65 74  } {02 008}.datet
2510: 65 73 74 20 33 2e 31 31 2e 32 30 20 7b 73 74 72  est 3.11.20 {str
2520: 66 74 69 6d 65 28 27 25 57 20 25 6a 27 2c 32 34  ftime('%W %j',24
2530: 35 34 31 30 39 2e 30 34 31 34 30 39 37 35 29 7d  54109.04140975)}
2540: 20 7b 30 32 20 30 30 38 7d 0a 64 61 74 65 74 65   {02 008}.datete
2550: 73 74 20 33 2e 31 31 2e 32 31 20 7b 73 74 72 66  st 3.11.21 {strf
2560: 74 69 6d 65 28 27 25 57 20 25 6a 27 2c 32 34 35  time('%W %j',245
2570: 34 31 30 39 2e 30 34 31 34 30 39 37 36 29 7d 20  4109.04140976)} 
2580: 7b 30 32 20 30 30 38 7d 0a 64 61 74 65 74 65 73  {02 008}.datetes
2590: 74 20 33 2e 31 31 2e 32 32 20 7b 73 74 72 66 74  t 3.11.22 {strft
25a0: 69 6d 65 28 27 25 57 20 25 6a 27 2c 32 34 35 34  ime('%W %j',2454
25b0: 31 30 39 2e 30 34 31 34 30 39 37 37 29 7d 20 7b  109.04140977)} {
25c0: 30 32 20 30 30 38 7d 0a 64 61 74 65 74 65 73 74  02 008}.datetest
25d0: 20 33 2e 31 31 2e 32 33 20 7b 73 74 72 66 74 69   3.11.23 {strfti
25e0: 6d 65 28 27 25 57 20 25 6a 27 2c 32 34 35 34 31  me('%W %j',24541
25f0: 30 39 2e 30 34 31 34 30 39 37 38 29 7d 20 7b 30  09.04140978)} {0
2600: 32 20 30 30 38 7d 0a 64 61 74 65 74 65 73 74 20  2 008}.datetest 
2610: 33 2e 31 31 2e 32 34 20 7b 73 74 72 66 74 69 6d  3.11.24 {strftim
2620: 65 28 27 25 57 20 25 6a 27 2c 32 34 35 34 31 30  e('%W %j',245410
2630: 39 2e 30 34 31 34 30 39 37 39 29 7d 20 7b 30 32  9.04140979)} {02
2640: 20 30 30 38 7d 0a 64 61 74 65 74 65 73 74 20 33   008}.datetest 3
2650: 2e 31 31 2e 32 35 20 7b 73 74 72 66 74 69 6d 65  .11.25 {strftime
2660: 28 27 25 57 20 25 6a 27 2c 32 34 35 34 31 30 39  ('%W %j',2454109
2670: 2e 30 34 31 34 30 39 38 30 29 7d 20 7b 30 32 20  .04140980)} {02 
2680: 30 30 38 7d 0a 64 61 74 65 74 65 73 74 20 33 2e  008}.datetest 3.
2690: 31 31 2e 39 39 20 7b 73 74 72 66 74 69 6d 65 28  11.99 {strftime(
26a0: 27 25 57 20 25 6a 27 2c 27 32 34 35 34 31 30 39  '%W %j','2454109
26b0: 2e 30 34 31 34 30 39 37 30 27 29 7d 20 7b 30 32  .04140970')} {02
26c0: 20 30 30 38 7d 0a 64 61 74 65 74 65 73 74 20 33   008}.datetest 3
26d0: 2e 31 32 20 7b 73 74 72 66 74 69 6d 65 28 27 25  .12 {strftime('%
26e0: 59 27 2c 27 32 30 30 33 2d 31 30 2d 33 31 20 31  Y','2003-10-31 1
26f0: 32 3a 33 34 3a 35 36 2e 34 33 32 27 29 7d 20 32  2:34:56.432')} 2
2700: 30 30 33 0a 64 61 74 65 74 65 73 74 20 33 2e 31  003.datetest 3.1
2710: 33 20 7b 73 74 72 66 74 69 6d 65 28 27 25 25 27  3 {strftime('%%'
2720: 2c 27 32 30 30 33 2d 31 30 2d 33 31 20 31 32 3a  ,'2003-10-31 12:
2730: 33 34 3a 35 36 2e 34 33 32 27 29 7d 20 25 0a 64  34:56.432')} %.d
2740: 61 74 65 74 65 73 74 20 33 2e 31 34 20 7b 73 74  atetest 3.14 {st
2750: 72 66 74 69 6d 65 28 27 25 5f 27 2c 27 32 30 30  rftime('%_','200
2760: 33 2d 31 30 2d 33 31 20 31 32 3a 33 34 3a 35 36  3-10-31 12:34:56
2770: 2e 34 33 32 27 29 7d 20 4e 55 4c 4c 0a 64 61 74  .432')} NULL.dat
2780: 65 74 65 73 74 20 33 2e 31 35 20 7b 73 74 72 66  etest 3.15 {strf
2790: 74 69 6d 65 28 27 25 59 2d 25 6d 2d 25 64 27 2c  time('%Y-%m-%d',
27a0: 27 32 30 30 33 2d 31 30 2d 33 31 27 29 7d 20 32  '2003-10-31')} 2
27b0: 30 30 33 2d 31 30 2d 33 31 0a 70 72 6f 63 20 72  003-10-31.proc r
27c0: 65 70 65 61 74 20 7b 6e 20 74 78 74 7d 20 7b 0a  epeat {n txt} {.
27d0: 20 20 73 65 74 20 78 20 7b 7d 20 0a 20 20 77 68    set x {} .  wh
27e0: 69 6c 65 20 7b 24 6e 3e 30 7d 20 7b 0a 20 20 20  ile {$n>0} {.   
27f0: 20 61 70 70 65 6e 64 20 78 20 24 74 78 74 0a 20   append x $txt. 
2800: 20 20 20 69 6e 63 72 20 6e 20 2d 31 0a 20 20 7d     incr n -1.  }
2810: 0a 20 20 72 65 74 75 72 6e 20 24 78 0a 7d 0a 64  .  return $x.}.d
2820: 61 74 65 74 65 73 74 20 33 2e 31 36 20 22 73 74  atetest 3.16 "st
2830: 72 66 74 69 6d 65 28 27 5b 72 65 70 65 61 74 20  rftime('[repeat 
2840: 32 30 30 20 25 59 5d 27 2c 27 32 30 30 33 2d 31  200 %Y]','2003-1
2850: 30 2d 33 31 27 29 22 20 5b 72 65 70 65 61 74 20  0-31')" [repeat 
2860: 32 30 30 20 32 30 30 33 5d 0a 64 61 74 65 74 65  200 2003].datete
2870: 73 74 20 33 2e 31 37 20 22 73 74 72 66 74 69 6d  st 3.17 "strftim
2880: 65 28 27 5b 72 65 70 65 61 74 20 32 30 30 20 61  e('[repeat 200 a
2890: 62 63 25 6d 31 32 33 5d 27 2c 27 32 30 30 33 2d  bc%m123]','2003-
28a0: 31 30 2d 33 31 27 29 22 20 5c 0a 20 20 20 20 5b  10-31')" \.    [
28b0: 72 65 70 65 61 74 20 32 30 30 20 61 62 63 31 30  repeat 200 abc10
28c0: 31 32 33 5d 0a 0a 66 6f 72 65 61 63 68 20 63 20  123]..foreach c 
28d0: 7b 61 20 62 20 63 20 65 20 67 20 68 20 69 20 6b  {a b c e g h i k
28e0: 20 6c 20 6e 20 6f 20 70 20 71 20 72 20 74 20 76   l n o p q r t v
28f0: 20 78 20 79 20 7a 0a 20 20 20 20 20 20 20 20 20   x y z.         
2900: 20 20 41 20 42 20 43 20 44 20 45 20 46 20 47 20    A B C D E F G 
2910: 49 20 4b 20 4c 20 4e 20 4f 20 50 20 51 20 52 20  I K L N O P Q R 
2920: 54 20 55 20 56 20 5a 0a 20 20 20 20 20 20 20 20  T U V Z.        
2930: 20 20 20 30 20 31 20 32 20 33 20 34 20 35 20 36     0 1 2 3 4 5 6
2940: 20 36 20 37 20 39 20 5f 7d 20 7b 0a 20 20 64 61   6 7 9 _} {.  da
2950: 74 65 74 65 73 74 20 33 2e 31 38 2e 24 63 20 22  tetest 3.18.$c "
2960: 73 74 72 66 74 69 6d 65 28 27 25 24 63 27 2c 27  strftime('%$c','
2970: 32 30 30 33 2d 31 30 2d 33 31 27 29 22 20 4e 55  2003-10-31')" NU
2980: 4c 4c 0a 7d 0a 0a 23 20 54 69 63 6b 65 74 20 23  LL.}..# Ticket #
2990: 32 32 37 36 2e 20 20 4d 61 6b 65 20 73 75 72 65  2276.  Make sure
29a0: 20 6c 65 61 64 69 6e 67 20 7a 65 72 6f 73 20 61   leading zeros a
29b0: 72 65 20 69 6e 73 65 72 74 65 64 20 77 68 65 72  re inserted wher
29c0: 65 20 61 70 70 72 6f 70 72 69 61 74 65 2e 0a 23  e appropriate..#
29d0: 0a 64 61 74 65 74 65 73 74 20 33 2e 32 30 20 5c  .datetest 3.20 \
29e0: 0a 20 20 20 7b 73 74 72 66 74 69 6d 65 28 27 25  .   {strftime('%
29f0: 64 2f 25 66 2f 25 48 2f 25 57 2f 25 6a 2f 25 6d  d/%f/%H/%W/%j/%m
2a00: 2f 25 4d 2f 25 53 2f 25 59 27 2c 27 30 34 32 31  /%M/%S/%Y','0421
2a10: 2d 30 31 2d 30 32 20 30 33 3a 30 34 3a 30 35 2e  -01-02 03:04:05.
2a20: 30 30 36 27 29 7d 20 5c 0a 20 20 20 30 32 2f 30  006')} \.   02/0
2a30: 35 2e 30 30 36 2f 30 33 2f 30 30 2f 30 30 32 2f  5.006/03/00/002/
2a40: 30 31 2f 30 34 2f 30 35 2f 30 34 32 31 0a 0a 73  01/04/05/0421..s
2a50: 65 74 20 73 71 6c 69 74 65 5f 63 75 72 72 65 6e  et sqlite_curren
2a60: 74 5f 74 69 6d 65 20 31 31 35 37 31 32 34 33 36  t_time 115712436
2a70: 37 0a 64 61 74 65 74 65 73 74 20 34 2e 31 20 7b  7.datetest 4.1 {
2a80: 64 61 74 65 28 27 6e 6f 77 27 29 7d 20 7b 32 30  date('now')} {20
2a90: 30 36 2d 30 39 2d 30 31 7d 0a 73 65 74 20 73 71  06-09-01}.set sq
2aa0: 6c 69 74 65 5f 63 75 72 72 65 6e 74 5f 74 69 6d  lite_current_tim
2ab0: 65 20 30 0a 0a 64 61 74 65 74 65 73 74 20 35 2e  e 0..datetest 5.
2ac0: 31 20 7b 64 61 74 65 74 69 6d 65 28 27 31 39 39  1 {datetime('199
2ad0: 34 2d 30 34 2d 31 36 20 31 34 3a 30 30 3a 30 30  4-04-16 14:00:00
2ae0: 20 2b 30 35 3a 30 30 27 29 7d 20 7b 31 39 39 34   +05:00')} {1994
2af0: 2d 30 34 2d 31 36 20 30 39 3a 30 30 3a 30 30 7d  -04-16 09:00:00}
2b00: 0a 64 61 74 65 74 65 73 74 20 35 2e 32 20 7b 64  .datetest 5.2 {d
2b10: 61 74 65 74 69 6d 65 28 27 31 39 39 34 2d 30 34  atetime('1994-04
2b20: 2d 31 36 20 31 34 3a 30 30 3a 30 30 20 2d 30 35  -16 14:00:00 -05
2b30: 3a 31 35 27 29 7d 20 7b 31 39 39 34 2d 30 34 2d  :15')} {1994-04-
2b40: 31 36 20 31 39 3a 31 35 3a 30 30 7d 0a 64 61 74  16 19:15:00}.dat
2b50: 65 74 65 73 74 20 35 2e 33 20 7b 64 61 74 65 74  etest 5.3 {datet
2b60: 69 6d 65 28 27 31 39 39 34 2d 30 34 2d 31 36 20  ime('1994-04-16 
2b70: 30 35 3a 30 30 3a 30 30 20 2b 30 38 3a 33 30 27  05:00:00 +08:30'
2b80: 29 7d 20 7b 31 39 39 34 2d 30 34 2d 31 35 20 32  )} {1994-04-15 2
2b90: 30 3a 33 30 3a 30 30 7d 0a 64 61 74 65 74 65 73  0:30:00}.datetes
2ba0: 74 20 35 2e 34 20 7b 64 61 74 65 74 69 6d 65 28  t 5.4 {datetime(
2bb0: 27 31 39 39 34 2d 30 34 2d 31 36 20 31 34 3a 30  '1994-04-16 14:0
2bc0: 30 3a 30 30 20 2d 31 31 3a 35 35 27 29 7d 20 7b  0:00 -11:55')} {
2bd0: 31 39 39 34 2d 30 34 2d 31 37 20 30 31 3a 35 35  1994-04-17 01:55
2be0: 3a 30 30 7d 0a 64 61 74 65 74 65 73 74 20 35 2e  :00}.datetest 5.
2bf0: 35 20 7b 64 61 74 65 74 69 6d 65 28 27 31 39 39  5 {datetime('199
2c00: 34 2d 30 34 2d 31 36 20 31 34 3a 30 30 3a 30 30  4-04-16 14:00:00
2c10: 20 2d 31 31 3a 36 30 27 29 7d 20 4e 55 4c 4c 0a   -11:60')} NULL.
2c20: 64 61 74 65 74 65 73 74 20 35 2e 36 20 7b 64 61  datetest 5.6 {da
2c30: 74 65 74 69 6d 65 28 27 31 39 39 34 2d 30 34 2d  tetime('1994-04-
2c40: 31 36 20 31 34 3a 30 30 3a 30 30 20 2d 31 31 3a  16 14:00:00 -11:
2c50: 35 35 20 20 27 29 7d 20 7b 31 39 39 34 2d 30 34  55  ')} {1994-04
2c60: 2d 31 37 20 30 31 3a 35 35 3a 30 30 7d 0a 64 61  -17 01:55:00}.da
2c70: 74 65 74 65 73 74 20 35 2e 37 20 7b 64 61 74 65  tetest 5.7 {date
2c80: 74 69 6d 65 28 27 31 39 39 34 2d 30 34 2d 31 36  time('1994-04-16
2c90: 20 31 34 3a 30 30 3a 30 30 20 2d 31 31 3a 35 35   14:00:00 -11:55
2ca0: 20 78 27 29 7d 20 4e 55 4c 4c 0a 64 61 74 65 74   x')} NULL.datet
2cb0: 65 73 74 20 35 2e 38 20 7b 64 61 74 65 74 69 6d  est 5.8 {datetim
2cc0: 65 28 27 31 39 39 34 2d 30 34 2d 31 36 54 31 34  e('1994-04-16T14
2cd0: 3a 30 30 3a 30 30 5a 27 29 7d 20 7b 31 39 39 34  :00:00Z')} {1994
2ce0: 2d 30 34 2d 31 36 20 31 34 3a 30 30 3a 30 30 7d  -04-16 14:00:00}
2cf0: 0a 64 61 74 65 74 65 73 74 20 35 2e 39 20 7b 64  .datetest 5.9 {d
2d00: 61 74 65 74 69 6d 65 28 27 31 39 39 34 2d 30 34  atetime('1994-04
2d10: 2d 31 36 20 31 34 3a 30 30 3a 30 30 7a 27 29 7d  -16 14:00:00z')}
2d20: 20 7b 31 39 39 34 2d 30 34 2d 31 36 20 31 34 3a   {1994-04-16 14:
2d30: 30 30 3a 30 30 7d 0a 64 61 74 65 74 65 73 74 20  00:00}.datetest 
2d40: 35 2e 31 30 20 7b 64 61 74 65 74 69 6d 65 28 27  5.10 {datetime('
2d50: 31 39 39 34 2d 30 34 2d 31 36 20 31 34 3a 30 30  1994-04-16 14:00
2d60: 3a 30 30 20 5a 27 29 7d 20 7b 31 39 39 34 2d 30  :00 Z')} {1994-0
2d70: 34 2d 31 36 20 31 34 3a 30 30 3a 30 30 7d 0a 64  4-16 14:00:00}.d
2d80: 61 74 65 74 65 73 74 20 35 2e 31 31 20 7b 64 61  atetest 5.11 {da
2d90: 74 65 74 69 6d 65 28 27 31 39 39 34 2d 30 34 2d  tetime('1994-04-
2da0: 31 36 20 31 34 3a 30 30 3a 30 30 7a 20 20 20 20  16 14:00:00z    
2db0: 27 29 7d 20 7b 31 39 39 34 2d 30 34 2d 31 36 20  ')} {1994-04-16 
2dc0: 31 34 3a 30 30 3a 30 30 7d 0a 64 61 74 65 74 65  14:00:00}.datete
2dd0: 73 74 20 35 2e 31 32 20 7b 64 61 74 65 74 69 6d  st 5.12 {datetim
2de0: 65 28 27 31 39 39 34 2d 30 34 2d 31 36 20 31 34  e('1994-04-16 14
2df0: 3a 30 30 3a 30 30 20 20 20 20 20 7a 20 20 20 20  :00:00     z    
2e00: 27 29 7d 20 7b 31 39 39 34 2d 30 34 2d 31 36 20  ')} {1994-04-16 
2e10: 31 34 3a 30 30 3a 30 30 7d 0a 64 61 74 65 74 65  14:00:00}.datete
2e20: 73 74 20 35 2e 31 33 20 7b 64 61 74 65 74 69 6d  st 5.13 {datetim
2e30: 65 28 27 31 39 39 34 2d 30 34 2d 31 36 20 31 34  e('1994-04-16 14
2e40: 3a 30 30 3a 30 30 5a 75 6c 75 27 29 7d 20 4e 55  :00:00Zulu')} NU
2e50: 4c 4c 0a 64 61 74 65 74 65 73 74 20 35 2e 31 34  LL.datetest 5.14
2e60: 20 7b 64 61 74 65 74 69 6d 65 28 27 31 39 39 34   {datetime('1994
2e70: 2d 30 34 2d 31 36 20 31 34 3a 30 30 3a 30 30 5a  -04-16 14:00:00Z
2e80: 20 2b 30 35 3a 30 30 27 29 7d 20 4e 55 4c 4c 0a   +05:00')} NULL.
2e90: 64 61 74 65 74 65 73 74 20 35 2e 31 35 20 7b 64  datetest 5.15 {d
2ea0: 61 74 65 74 69 6d 65 28 27 31 39 39 34 2d 30 34  atetime('1994-04
2eb0: 2d 31 36 20 31 34 3a 30 30 3a 30 30 20 2b 30 35  -16 14:00:00 +05
2ec0: 3a 30 30 20 5a 27 29 7d 20 4e 55 4c 4c 0a 0a 23  :00 Z')} NULL..#
2ed0: 20 6c 6f 63 61 6c 74 69 6d 65 2d 3e 75 74 63 20   localtime->utc 
2ee0: 61 6e 64 20 75 74 63 2d 3e 6c 6f 63 61 6c 74 69  and utc->localti
2ef0: 6d 65 20 63 6f 6e 76 65 72 73 69 6f 6e 73 2e 20  me conversions. 
2f00: 20 54 68 65 73 65 20 74 65 73 74 73 20 6f 6e 6c   These tests onl
2f10: 79 20 77 6f 72 6b 0a 23 20 69 66 20 74 68 65 20  y work.# if the 
2f20: 6c 6f 63 61 6c 74 69 6d 65 20 69 73 20 69 6e 20  localtime is in 
2f30: 74 68 65 20 55 53 20 45 61 73 74 65 72 6e 20 54  the US Eastern T
2f40: 69 6d 65 20 28 74 68 65 20 74 69 6d 65 20 69 6e  ime (the time in
2f50: 20 43 68 61 72 6c 6f 74 74 65 2c 20 4e 43 0a 23   Charlotte, NC.#
2f60: 20 61 6e 64 20 69 6e 20 4e 65 77 20 59 6f 72 6b   and in New York
2f70: 2e 29 0a 23 0a 23 20 4f 6e 20 6e 6f 6e 2d 56 69  .).#.# On non-Vi
2f80: 73 74 61 20 57 69 6e 64 6f 77 73 20 70 6c 61 74  sta Windows plat
2f90: 66 6f 72 6d 2c 20 27 32 30 30 36 2d 30 33 2d 33  form, '2006-03-3
2fa0: 31 27 20 69 73 20 74 72 65 61 74 65 64 20 69 6e  1' is treated in
2fb0: 63 6f 72 72 65 63 74 6c 79 20 61 73 20 62 65 69  correctly as bei
2fc0: 6e 67 0a 23 20 69 6e 20 44 53 54 20 67 69 76 69  ng.# in DST givi
2fd0: 6e 67 20 61 20 34 20 68 6f 75 72 20 6f 66 66 73  ng a 4 hour offs
2fe0: 65 74 20 69 6e 73 74 65 61 64 20 6f 66 20 35 2e  et instead of 5.
2ff0: 20 20 49 6e 20 32 30 30 37 2c 20 44 53 54 20 77    In 2007, DST w
3000: 61 73 20 65 78 74 65 6e 64 65 64 20 74 6f 20 0a  as extended to .
3010: 23 20 73 74 61 72 74 20 74 68 72 65 65 20 77 65  # start three we
3020: 65 6b 73 20 65 61 72 6c 69 65 72 20 28 73 65 63  eks earlier (sec
3030: 6f 6e 64 20 53 75 6e 64 61 79 20 69 6e 20 4d 61  ond Sunday in Ma
3040: 72 63 68 29 20 61 6e 64 20 65 6e 64 20 6f 6e 65  rch) and end one
3050: 20 77 65 65 6b 0a 23 20 6c 61 74 65 72 20 28 66   week.# later (f
3060: 69 72 73 74 20 53 75 6e 64 61 79 20 69 6e 20 4e  irst Sunday in N
3070: 6f 76 65 6d 62 65 72 29 2e 20 20 4f 6c 64 65 72  ovember).  Older
3080: 20 57 69 6e 64 6f 77 73 20 73 79 73 74 65 6d 73   Windows systems
3090: 20 61 70 70 6c 79 20 74 68 69 73 0a 23 20 6e 65   apply this.# ne
30a0: 77 20 72 75 6c 65 20 69 6e 63 6f 72 72 65 63 74  w rule incorrect
30b0: 6c 79 20 74 6f 20 64 61 74 65 73 20 70 72 69 6f  ly to dates prio
30c0: 72 20 74 6f 20 32 30 30 37 2e 0a 23 0a 23 20 49  r to 2007..#.# I
30d0: 74 20 6d 69 67 68 74 20 62 65 20 61 72 67 75 65  t might be argue
30e0: 64 20 74 68 61 74 20 74 68 69 73 20 69 73 20 6d  d that this is m
30f0: 61 73 6b 69 6e 67 20 61 20 70 72 6f 62 6c 65 6d  asking a problem
3100: 20 6f 6e 20 6e 6f 6e 2d 56 69 73 74 61 20 57 69   on non-Vista Wi
3110: 6e 64 6f 77 73 0a 23 20 70 6c 61 74 66 6f 72 6d  ndows.# platform
3120: 2e 20 20 41 20 74 69 63 6b 65 74 20 68 61 73 20  .  A ticket has 
3130: 61 6c 72 65 61 64 79 20 62 65 65 6e 20 6f 70 65  already been ope
3140: 6e 65 64 20 66 6f 72 20 74 68 69 73 20 69 73 73  ned for this iss
3150: 75 65 20 0a 23 20 28 68 74 74 70 3a 2f 2f 77 77  ue .# (http://ww
3160: 77 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 63 76 73  w.sqlite.org/cvs
3170: 74 72 61 63 2f 74 6b 74 76 69 65 77 3f 74 6e 3d  trac/tktview?tn=
3180: 32 33 32 32 29 2e 20 20 54 68 69 73 20 69 73 20  2322).  This is 
3190: 6a 75 73 74 20 74 6f 20 70 72 65 76 65 6e 74 0a  just to prevent.
31a0: 23 20 6d 6f 72 65 20 63 6f 6e 66 75 73 69 6f 6e  # more confusion
31b0: 2f 72 65 70 6f 72 74 73 20 6f 66 20 74 68 65 20  /reports of the 
31c0: 69 73 73 75 65 2e 0a 23 0a 0a 23 20 24 74 7a 6f  issue..#..# $tzo
31d0: 66 66 73 65 74 5f 6f 6c 64 20 73 68 6f 75 6c 64  ffset_old should
31e0: 20 62 65 20 35 20 69 66 20 44 53 54 20 69 73 20   be 5 if DST is 
31f0: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
3200: 79 2e 0a 73 65 74 20 74 7a 6f 66 66 73 65 74 5f  y..set tzoffset_
3210: 6f 6c 64 20 5b 64 62 20 6f 6e 65 20 7b 0a 20 20  old [db one {.  
3220: 53 45 4c 45 43 54 20 43 41 53 54 28 32 34 2a 28  SELECT CAST(24*(
3230: 6a 75 6c 69 61 6e 64 61 79 28 27 32 30 30 36 2d  julianday('2006-
3240: 30 33 2d 33 31 27 29 20 2d 0a 20 20 20 20 20 20  03-31') -.      
3250: 20 20 20 20 20 20 20 20 20 20 20 20 6a 75 6c 69              juli
3260: 61 6e 64 61 79 28 27 32 30 30 36 2d 30 33 2d 33  anday('2006-03-3
3270: 31 27 2c 27 6c 6f 63 61 6c 74 69 6d 65 27 29 29  1','localtime'))
3280: 2b 30 2e 35 0a 20 20 20 20 20 20 20 20 20 20 20  +0.5.           
3290: 20 20 20 41 53 20 49 4e 54 29 0a 7d 5d 0a 0a 23     AS INT).}]..#
32a0: 20 24 74 7a 6f 66 66 73 65 74 5f 6e 65 77 20 73   $tzoffset_new s
32b0: 68 6f 75 6c 64 20 62 65 20 34 20 69 66 20 44 53  hould be 4 if DS
32c0: 54 20 69 73 20 77 6f 72 6b 69 6e 67 20 63 6f 72  T is working cor
32d0: 72 65 63 74 6c 79 2e 0a 73 65 74 20 74 7a 6f 66  rectly..set tzof
32e0: 66 73 65 74 5f 6e 65 77 20 5b 64 62 20 6f 6e 65  fset_new [db one
32f0: 20 7b 0a 20 20 53 45 4c 45 43 54 20 43 41 53 54   {.  SELECT CAST
3300: 28 32 34 2a 28 6a 75 6c 69 61 6e 64 61 79 28 27  (24*(julianday('
3310: 32 30 30 37 2d 30 33 2d 33 31 27 29 20 2d 0a 20  2007-03-31') -. 
3320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3330: 20 6a 75 6c 69 61 6e 64 61 79 28 27 32 30 30 37   julianday('2007
3340: 2d 30 33 2d 33 31 27 2c 27 6c 6f 63 61 6c 74 69  -03-31','localti
3350: 6d 65 27 29 29 2b 30 2e 35 0a 20 20 20 20 20 20  me'))+0.5.      
3360: 20 20 20 20 20 20 20 20 41 53 20 49 4e 54 29 0a          AS INT).
3370: 7d 5d 0a 0a 23 20 57 61 72 6e 20 61 62 6f 75 74  }]..# Warn about
3380: 20 70 6f 73 73 69 62 6c 79 20 62 72 6f 6b 65 6e   possibly broken
3390: 20 57 69 6e 64 6f 77 73 20 44 53 54 20 69 6d 70   Windows DST imp
33a0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 2e 0a 69 66  lementations..if
33b0: 20 7b 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72   {$::tcl_platfor
33c0: 6d 28 70 6c 61 74 66 6f 72 6d 29 3d 3d 22 77 69  m(platform)=="wi
33d0: 6e 64 6f 77 73 22 20 26 26 20 24 74 7a 6f 66 66  ndows" && $tzoff
33e0: 73 65 74 5f 6e 65 77 3d 3d 34 20 26 26 20 24 74  set_new==4 && $t
33f0: 7a 6f 66 66 73 65 74 5f 6f 6c 64 3d 3d 34 7d 20  zoffset_old==4} 
3400: 7b 0a 20 20 70 75 74 73 20 22 2a 2a 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 22 0a 20 20  ************".  
3450: 70 75 74 73 20 22 4e 2e 42 2e 3a 20 20 54 68 65  puts "N.B.:  The
3460: 20 44 53 54 20 73 75 70 70 6f 72 74 20 70 72 6f   DST support pro
3470: 76 69 64 65 64 20 62 79 20 79 6f 75 72 20 63 75  vided by your cu
3480: 72 72 65 6e 74 20 4f 2f 53 20 73 65 65 6d 73 20  rrent O/S seems 
3490: 74 6f 20 62 65 22 0a 20 20 70 75 74 73 20 22 73  to be".  puts "s
34a0: 75 73 70 65 63 74 20 69 6e 20 74 68 61 74 20 69  uspect in that i
34b0: 74 20 69 73 20 72 65 70 6f 72 74 69 6e 67 20 69  t is reporting i
34c0: 6e 63 6f 72 72 65 63 74 20 44 53 54 20 76 61 6c  ncorrect DST val
34d0: 75 65 73 20 66 6f 72 20 64 61 74 65 73 22 0a 20  ues for dates". 
34e0: 20 70 75 74 73 20 22 70 72 69 6f 72 20 74 6f 20   puts "prior to 
34f0: 32 30 30 37 2e 20 20 54 68 69 73 20 69 73 20 74  2007.  This is t
3500: 68 65 20 6b 6e 6f 77 6e 20 63 61 73 65 20 66 6f  he known case fo
3510: 72 20 6d 6f 73 74 20 28 61 6c 6c 3f 29 20 6e 6f  r most (all?) no
3520: 6e 2d 56 69 73 74 61 22 0a 20 20 70 75 74 73 20  n-Vista".  puts 
3530: 22 57 69 6e 64 6f 77 73 20 76 65 72 73 69 6f 6e  "Windows version
3540: 73 2e 20 20 50 6c 65 61 73 65 20 73 65 65 20 74  s.  Please see t
3550: 69 63 6b 65 74 20 23 32 33 32 32 20 66 6f 72 20  icket #2322 for 
3560: 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  more information
3570: 2e 22 0a 20 20 70 75 74 73 20 22 2a 2a 2a 2a 2a  .".  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 22 0a 7d  *************".}
35c0: 0a 0a 69 66 20 7b 24 74 7a 6f 66 66 73 65 74 5f  ..if {$tzoffset_
35d0: 6e 65 77 3d 3d 34 7d 20 7b 0a 20 20 64 61 74 65  new==4} {.  date
35e0: 74 65 73 74 20 36 2e 31 20 7b 64 61 74 65 74 69  test 6.1 {dateti
35f0: 6d 65 28 27 32 30 30 30 2d 31 30 2d 32 39 20 30  me('2000-10-29 0
3600: 35 3a 35 39 3a 30 30 27 2c 27 6c 6f 63 61 6c 74  5:59:00','localt
3610: 69 6d 65 27 29 7d 5c 0a 20 20 20 20 20 20 7b 32  ime')}\.      {2
3620: 30 30 30 2d 31 30 2d 32 39 20 30 31 3a 35 39 3a  000-10-29 01:59:
3630: 30 30 7d 0a 20 20 64 61 74 65 74 65 73 74 20 36  00}.  datetest 6
3640: 2e 31 2e 31 20 7b 64 61 74 65 74 69 6d 65 28 27  .1.1 {datetime('
3650: 32 30 30 36 2d 31 30 2d 32 39 20 30 35 3a 35 39  2006-10-29 05:59
3660: 3a 30 30 27 2c 27 6c 6f 63 61 6c 74 69 6d 65 27  :00','localtime'
3670: 29 7d 5c 0a 20 20 20 20 20 20 7b 32 30 30 36 2d  )}\.      {2006-
3680: 31 30 2d 32 39 20 30 31 3a 35 39 3a 30 30 7d 0a  10-29 01:59:00}.
3690: 20 20 64 61 74 65 74 65 73 74 20 36 2e 31 2e 32    datetest 6.1.2
36a0: 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30 37   {datetime('2007
36b0: 2d 31 31 2d 30 34 20 30 35 3a 35 39 3a 30 30 27  -11-04 05:59:00'
36c0: 2c 27 6c 6f 63 61 6c 74 69 6d 65 27 29 7d 5c 0a  ,'localtime')}\.
36d0: 20 20 20 20 20 20 7b 32 30 30 37 2d 31 31 2d 30        {2007-11-0
36e0: 34 20 30 31 3a 35 39 3a 30 30 7d 0a 0a 20 20 23  4 01:59:00}..  #
36f0: 20 49 66 20 74 68 65 20 6e 65 77 20 61 6e 64 20   If the new and 
3700: 6f 6c 64 20 44 53 54 20 72 75 6c 65 73 20 73 65  old DST rules se
3710: 65 6d 20 74 6f 20 62 65 20 77 6f 72 6b 69 6e 67  em to be working
3720: 20 63 6f 72 72 65 63 74 6c 79 2e 2e 2e 0a 20 20   correctly....  
3730: 69 66 20 7b 24 74 7a 6f 66 66 73 65 74 5f 6e 65  if {$tzoffset_ne
3740: 77 3d 3d 34 20 26 26 20 24 74 7a 6f 66 66 73 65  w==4 && $tzoffse
3750: 74 5f 6f 6c 64 3d 3d 35 7d 20 7b 0a 20 20 20 20  t_old==5} {.    
3760: 64 61 74 65 74 65 73 74 20 36 2e 32 20 7b 64 61  datetest 6.2 {da
3770: 74 65 74 69 6d 65 28 27 32 30 30 30 2d 31 30 2d  tetime('2000-10-
3780: 32 39 20 30 36 3a 30 30 3a 30 30 27 2c 27 6c 6f  29 06:00:00','lo
3790: 63 61 6c 74 69 6d 65 27 29 7d 5c 0a 20 20 20 20  caltime')}\.    
37a0: 20 20 20 20 7b 32 30 30 30 2d 31 30 2d 32 39 20      {2000-10-29 
37b0: 30 31 3a 30 30 3a 30 30 7d 0a 20 20 20 20 64 61  01:00:00}.    da
37c0: 74 65 74 65 73 74 20 36 2e 32 2e 31 20 7b 64 61  tetest 6.2.1 {da
37d0: 74 65 74 69 6d 65 28 27 32 30 30 36 2d 31 30 2d  tetime('2006-10-
37e0: 32 39 20 30 36 3a 30 30 3a 30 30 27 2c 27 6c 6f  29 06:00:00','lo
37f0: 63 61 6c 74 69 6d 65 27 29 7d 5c 0a 20 20 20 20  caltime')}\.    
3800: 20 20 20 20 7b 32 30 30 36 2d 31 30 2d 32 39 20      {2006-10-29 
3810: 30 31 3a 30 30 3a 30 30 7d 0a 20 20 7d 0a 20 20  01:00:00}.  }.  
3820: 64 61 74 65 74 65 73 74 20 36 2e 32 2e 32 20 7b  datetest 6.2.2 {
3830: 64 61 74 65 74 69 6d 65 28 27 32 30 30 37 2d 31  datetime('2007-1
3840: 31 2d 30 34 20 30 36 3a 30 30 3a 30 30 27 2c 27  1-04 06:00:00','
3850: 6c 6f 63 61 6c 74 69 6d 65 27 29 7d 5c 0a 20 20  localtime')}\.  
3860: 20 20 20 20 7b 32 30 30 37 2d 31 31 2d 30 34 20      {2007-11-04 
3870: 30 31 3a 30 30 3a 30 30 7d 0a 0a 20 20 23 20 49  01:00:00}..  # I
3880: 66 20 74 68 65 20 6e 65 77 20 61 6e 64 20 6f 6c  f the new and ol
3890: 64 20 44 53 54 20 72 75 6c 65 73 20 73 65 65 6d  d DST rules seem
38a0: 20 74 6f 20 62 65 20 77 6f 72 6b 69 6e 67 20 63   to be working c
38b0: 6f 72 72 65 63 74 6c 79 2e 2e 2e 0a 20 20 69 66  orrectly....  if
38c0: 20 7b 24 74 7a 6f 66 66 73 65 74 5f 6e 65 77 3d   {$tzoffset_new=
38d0: 3d 34 20 26 26 20 24 74 7a 6f 66 66 73 65 74 5f  =4 && $tzoffset_
38e0: 6f 6c 64 3d 3d 35 7d 20 7b 0a 20 20 20 20 64 61  old==5} {.    da
38f0: 74 65 74 65 73 74 20 36 2e 33 20 7b 64 61 74 65  tetest 6.3 {date
3900: 74 69 6d 65 28 27 32 30 30 30 2d 30 34 2d 30 32  time('2000-04-02
3910: 20 30 36 3a 35 39 3a 30 30 27 2c 27 6c 6f 63 61   06:59:00','loca
3920: 6c 74 69 6d 65 27 29 7d 5c 0a 20 20 20 20 20 20  ltime')}\.      
3930: 20 20 7b 32 30 30 30 2d 30 34 2d 30 32 20 30 31    {2000-04-02 01
3940: 3a 35 39 3a 30 30 7d 0a 20 20 20 20 64 61 74 65  :59:00}.    date
3950: 74 65 73 74 20 36 2e 33 2e 31 20 7b 64 61 74 65  test 6.3.1 {date
3960: 74 69 6d 65 28 27 32 30 30 36 2d 30 34 2d 30 32  time('2006-04-02
3970: 20 30 36 3a 35 39 3a 30 30 27 2c 27 6c 6f 63 61   06:59:00','loca
3980: 6c 74 69 6d 65 27 29 7d 5c 0a 20 20 20 20 20 20  ltime')}\.      
3990: 20 20 7b 32 30 30 36 2d 30 34 2d 30 32 20 30 31    {2006-04-02 01
39a0: 3a 35 39 3a 30 30 7d 0a 20 20 7d 0a 20 20 64 61  :59:00}.  }.  da
39b0: 74 65 74 65 73 74 20 36 2e 33 2e 32 20 7b 64 61  tetest 6.3.2 {da
39c0: 74 65 74 69 6d 65 28 27 32 30 30 37 2d 30 33 2d  tetime('2007-03-
39d0: 31 31 20 30 37 3a 30 30 3a 30 30 27 2c 27 6c 6f  11 07:00:00','lo
39e0: 63 61 6c 74 69 6d 65 27 29 7d 5c 0a 20 20 20 20  caltime')}\.    
39f0: 20 20 7b 32 30 30 37 2d 30 33 2d 31 31 20 30 33    {2007-03-11 03
3a00: 3a 30 30 3a 30 30 7d 0a 0a 20 20 64 61 74 65 74  :00:00}..  datet
3a10: 65 73 74 20 36 2e 34 20 7b 64 61 74 65 74 69 6d  est 6.4 {datetim
3a20: 65 28 27 32 30 30 30 2d 30 34 2d 30 32 20 30 37  e('2000-04-02 07
3a30: 3a 30 30 3a 30 30 27 2c 27 6c 6f 63 61 6c 74 69  :00:00','localti
3a40: 6d 65 27 29 7d 5c 0a 20 20 20 20 20 20 7b 32 30  me')}\.      {20
3a50: 30 30 2d 30 34 2d 30 32 20 30 33 3a 30 30 3a 30  00-04-02 03:00:0
3a60: 30 7d 0a 20 20 64 61 74 65 74 65 73 74 20 36 2e  0}.  datetest 6.
3a70: 34 2e 31 20 7b 64 61 74 65 74 69 6d 65 28 27 32  4.1 {datetime('2
3a80: 30 30 36 2d 30 34 2d 30 32 20 30 37 3a 30 30 3a  006-04-02 07:00:
3a90: 30 30 27 2c 27 6c 6f 63 61 6c 74 69 6d 65 27 29  00','localtime')
3aa0: 7d 5c 0a 20 20 20 20 20 20 7b 32 30 30 36 2d 30  }\.      {2006-0
3ab0: 34 2d 30 32 20 30 33 3a 30 30 3a 30 30 7d 0a 20  4-02 03:00:00}. 
3ac0: 20 64 61 74 65 74 65 73 74 20 36 2e 34 2e 32 20   datetest 6.4.2 
3ad0: 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30 37 2d  {datetime('2007-
3ae0: 30 33 2d 31 31 20 30 37 3a 30 30 3a 30 30 27 2c  03-11 07:00:00',
3af0: 27 6c 6f 63 61 6c 74 69 6d 65 27 29 7d 5c 0a 20  'localtime')}\. 
3b00: 20 20 20 20 20 7b 32 30 30 37 2d 30 33 2d 31 31       {2007-03-11
3b10: 20 30 33 3a 30 30 3a 30 30 7d 0a 20 20 20 20 20   03:00:00}.     
3b20: 20 0a 20 20 64 61 74 65 74 65 73 74 20 36 2e 35   .  datetest 6.5
3b30: 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30 30   {datetime('2000
3b40: 2d 31 30 2d 32 39 20 30 31 3a 35 39 3a 30 30 27  -10-29 01:59:00'
3b50: 2c 27 75 74 63 27 29 7d 20 7b 32 30 30 30 2d 31  ,'utc')} {2000-1
3b60: 30 2d 32 39 20 30 35 3a 35 39 3a 30 30 7d 0a 20  0-29 05:59:00}. 
3b70: 20 64 61 74 65 74 65 73 74 20 36 2e 35 2e 31 20   datetest 6.5.1 
3b80: 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30 36 2d  {datetime('2006-
3b90: 31 30 2d 32 39 20 30 31 3a 35 39 3a 30 30 27 2c  10-29 01:59:00',
3ba0: 27 75 74 63 27 29 7d 20 7b 32 30 30 36 2d 31 30  'utc')} {2006-10
3bb0: 2d 32 39 20 30 35 3a 35 39 3a 30 30 7d 0a 20 20  -29 05:59:00}.  
3bc0: 64 61 74 65 74 65 73 74 20 36 2e 35 2e 32 20 7b  datetest 6.5.2 {
3bd0: 64 61 74 65 74 69 6d 65 28 27 32 30 30 37 2d 31  datetime('2007-1
3be0: 31 2d 30 34 20 30 31 3a 35 39 3a 30 30 27 2c 27  1-04 01:59:00','
3bf0: 75 74 63 27 29 7d 20 7b 32 30 30 37 2d 31 31 2d  utc')} {2007-11-
3c00: 30 34 20 30 35 3a 35 39 3a 30 30 7d 0a 0a 20 20  04 05:59:00}..  
3c10: 23 20 49 66 20 74 68 65 20 6e 65 77 20 61 6e 64  # If the new and
3c20: 20 6f 6c 64 20 44 53 54 20 72 75 6c 65 73 20 73   old DST rules s
3c30: 65 65 6d 20 74 6f 20 62 65 20 77 6f 72 6b 69 6e  eem to be workin
3c40: 67 20 63 6f 72 72 65 63 74 6c 79 2e 2e 2e 0a 20  g correctly.... 
3c50: 20 69 66 20 7b 24 74 7a 6f 66 66 73 65 74 5f 6e   if {$tzoffset_n
3c60: 65 77 3d 3d 34 20 26 26 20 24 74 7a 6f 66 66 73  ew==4 && $tzoffs
3c70: 65 74 5f 6f 6c 64 3d 3d 35 7d 20 7b 0a 20 20 20  et_old==5} {.   
3c80: 20 64 61 74 65 74 65 73 74 20 36 2e 36 20 7b 64   datetest 6.6 {d
3c90: 61 74 65 74 69 6d 65 28 27 32 30 30 30 2d 31 30  atetime('2000-10
3ca0: 2d 32 39 20 30 32 3a 30 30 3a 30 30 27 2c 27 75  -29 02:00:00','u
3cb0: 74 63 27 29 7d 20 7b 32 30 30 30 2d 31 30 2d 32  tc')} {2000-10-2
3cc0: 39 20 30 37 3a 30 30 3a 30 30 7d 0a 20 20 20 20  9 07:00:00}.    
3cd0: 64 61 74 65 74 65 73 74 20 36 2e 36 2e 31 20 7b  datetest 6.6.1 {
3ce0: 64 61 74 65 74 69 6d 65 28 27 32 30 30 36 2d 31  datetime('2006-1
3cf0: 30 2d 32 39 20 30 32 3a 30 30 3a 30 30 27 2c 27  0-29 02:00:00','
3d00: 75 74 63 27 29 7d 20 7b 32 30 30 36 2d 31 30 2d  utc')} {2006-10-
3d10: 32 39 20 30 37 3a 30 30 3a 30 30 7d 0a 20 20 7d  29 07:00:00}.  }
3d20: 0a 20 20 64 61 74 65 74 65 73 74 20 36 2e 36 2e  .  datetest 6.6.
3d30: 32 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30  2 {datetime('200
3d40: 37 2d 31 31 2d 30 34 20 30 32 3a 30 30 3a 30 30  7-11-04 02:00:00
3d50: 27 2c 27 75 74 63 27 29 7d 20 7b 32 30 30 37 2d  ','utc')} {2007-
3d60: 31 31 2d 30 34 20 30 37 3a 30 30 3a 30 30 7d 0a  11-04 07:00:00}.
3d70: 0a 20 20 23 20 49 66 20 74 68 65 20 6e 65 77 20  .  # If the new 
3d80: 61 6e 64 20 6f 6c 64 20 44 53 54 20 72 75 6c 65  and old DST rule
3d90: 73 20 73 65 65 6d 20 74 6f 20 62 65 20 77 6f 72  s seem to be wor
3da0: 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c 79 2e 2e  king correctly..
3db0: 2e 0a 20 20 69 66 20 7b 24 74 7a 6f 66 66 73 65  ..  if {$tzoffse
3dc0: 74 5f 6e 65 77 3d 3d 34 20 26 26 20 24 74 7a 6f  t_new==4 && $tzo
3dd0: 66 66 73 65 74 5f 6f 6c 64 3d 3d 35 7d 20 7b 0a  ffset_old==5} {.
3de0: 20 20 20 20 64 61 74 65 74 65 73 74 20 36 2e 37      datetest 6.7
3df0: 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30 30   {datetime('2000
3e00: 2d 30 34 2d 30 32 20 30 31 3a 35 39 3a 30 30 27  -04-02 01:59:00'
3e10: 2c 27 75 74 63 27 29 7d 20 7b 32 30 30 30 2d 30  ,'utc')} {2000-0
3e20: 34 2d 30 32 20 30 36 3a 35 39 3a 30 30 7d 0a 20  4-02 06:59:00}. 
3e30: 20 20 20 64 61 74 65 74 65 73 74 20 36 2e 37 2e     datetest 6.7.
3e40: 31 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30  1 {datetime('200
3e50: 36 2d 30 34 2d 30 32 20 30 31 3a 35 39 3a 30 30  6-04-02 01:59:00
3e60: 27 2c 27 75 74 63 27 29 7d 20 7b 32 30 30 36 2d  ','utc')} {2006-
3e70: 30 34 2d 30 32 20 30 36 3a 35 39 3a 30 30 7d 0a  04-02 06:59:00}.
3e80: 20 20 7d 0a 20 20 64 61 74 65 74 65 73 74 20 36    }.  datetest 6
3e90: 2e 37 2e 32 20 7b 64 61 74 65 74 69 6d 65 28 27  .7.2 {datetime('
3ea0: 32 30 30 37 2d 30 33 2d 31 31 20 30 31 3a 35 39  2007-03-11 01:59
3eb0: 3a 30 30 27 2c 27 75 74 63 27 29 7d 20 7b 32 30  :00','utc')} {20
3ec0: 30 37 2d 30 33 2d 31 31 20 30 36 3a 35 39 3a 30  07-03-11 06:59:0
3ed0: 30 7d 0a 0a 20 20 64 61 74 65 74 65 73 74 20 36  0}..  datetest 6
3ee0: 2e 38 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30  .8 {datetime('20
3ef0: 30 30 2d 30 34 2d 30 32 20 30 32 3a 30 30 3a 30  00-04-02 02:00:0
3f00: 30 27 2c 27 75 74 63 27 29 7d 20 7b 32 30 30 30  0','utc')} {2000
3f10: 2d 30 34 2d 30 32 20 30 36 3a 30 30 3a 30 30 7d  -04-02 06:00:00}
3f20: 0a 20 20 64 61 74 65 74 65 73 74 20 36 2e 38 2e  .  datetest 6.8.
3f30: 31 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30  1 {datetime('200
3f40: 36 2d 30 34 2d 30 32 20 30 32 3a 30 30 3a 30 30  6-04-02 02:00:00
3f50: 27 2c 27 75 74 63 27 29 7d 20 7b 32 30 30 36 2d  ','utc')} {2006-
3f60: 30 34 2d 30 32 20 30 36 3a 30 30 3a 30 30 7d 0a  04-02 06:00:00}.
3f70: 20 20 64 61 74 65 74 65 73 74 20 36 2e 38 2e 32    datetest 6.8.2
3f80: 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30 37   {datetime('2007
3f90: 2d 30 33 2d 31 31 20 30 32 3a 30 30 3a 30 30 27  -03-11 02:00:00'
3fa0: 2c 27 75 74 63 27 29 7d 20 7b 32 30 30 37 2d 30  ,'utc')} {2007-0
3fb0: 33 2d 31 31 20 30 36 3a 30 30 3a 30 30 7d 0a 0a  3-11 06:00:00}..
3fc0: 20 20 64 61 74 65 74 65 73 74 20 36 2e 31 30 20    datetest 6.10 
3fd0: 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30 30 2d  {datetime('2000-
3fe0: 30 31 2d 30 31 20 31 32 3a 30 30 3a 30 30 27 2c  01-01 12:00:00',
3ff0: 27 6c 6f 63 61 6c 74 69 6d 65 27 29 7d 20 5c 0a  'localtime')} \.
4000: 20 20 20 20 20 20 7b 32 30 30 30 2d 30 31 2d 30        {2000-01-0
4010: 31 20 30 37 3a 30 30 3a 30 30 7d 0a 20 20 64 61  1 07:00:00}.  da
4020: 74 65 74 65 73 74 20 36 2e 31 31 20 7b 64 61 74  tetest 6.11 {dat
4030: 65 74 69 6d 65 28 27 31 39 36 39 2d 30 31 2d 30  etime('1969-01-0
4040: 31 20 31 32 3a 30 30 3a 30 30 27 2c 27 6c 6f 63  1 12:00:00','loc
4050: 61 6c 74 69 6d 65 27 29 7d 20 5c 0a 20 20 20 20  altime')} \.    
4060: 20 20 7b 31 39 36 39 2d 30 31 2d 30 31 20 30 37    {1969-01-01 07
4070: 3a 30 30 3a 30 30 7d 0a 20 20 64 61 74 65 74 65  :00:00}.  datete
4080: 73 74 20 36 2e 31 32 20 7b 64 61 74 65 74 69 6d  st 6.12 {datetim
4090: 65 28 27 32 30 33 39 2d 30 31 2d 30 31 20 31 32  e('2039-01-01 12
40a0: 3a 30 30 3a 30 30 27 2c 27 6c 6f 63 61 6c 74 69  :00:00','localti
40b0: 6d 65 27 29 7d 20 5c 0a 20 20 20 20 20 20 7b 32  me')} \.      {2
40c0: 30 33 39 2d 30 31 2d 30 31 20 30 37 3a 30 30 3a  039-01-01 07:00:
40d0: 30 30 7d 0a 20 20 64 61 74 65 74 65 73 74 20 36  00}.  datetest 6
40e0: 2e 31 33 20 7b 64 61 74 65 74 69 6d 65 28 27 32  .13 {datetime('2
40f0: 30 30 30 2d 30 37 2d 30 31 20 31 32 3a 30 30 3a  000-07-01 12:00:
4100: 30 30 27 2c 27 6c 6f 63 61 6c 74 69 6d 65 27 29  00','localtime')
4110: 7d 20 5c 0a 20 20 20 20 20 20 7b 32 30 30 30 2d  } \.      {2000-
4120: 30 37 2d 30 31 20 30 38 3a 30 30 3a 30 30 7d 0a  07-01 08:00:00}.
4130: 20 20 64 61 74 65 74 65 73 74 20 36 2e 31 34 20    datetest 6.14 
4140: 7b 64 61 74 65 74 69 6d 65 28 27 31 39 36 39 2d  {datetime('1969-
4150: 30 37 2d 30 31 20 31 32 3a 30 30 3a 30 30 27 2c  07-01 12:00:00',
4160: 27 6c 6f 63 61 6c 74 69 6d 65 27 29 7d 20 5c 0a  'localtime')} \.
4170: 20 20 20 20 20 20 7b 31 39 36 39 2d 30 37 2d 30        {1969-07-0
4180: 31 20 30 37 3a 30 30 3a 30 30 7d 0a 20 20 64 61  1 07:00:00}.  da
4190: 74 65 74 65 73 74 20 36 2e 31 35 20 7b 64 61 74  tetest 6.15 {dat
41a0: 65 74 69 6d 65 28 27 32 30 33 39 2d 30 37 2d 30  etime('2039-07-0
41b0: 31 20 31 32 3a 30 30 3a 30 30 27 2c 27 6c 6f 63  1 12:00:00','loc
41c0: 61 6c 74 69 6d 65 27 29 7d 20 5c 0a 20 20 20 20  altime')} \.    
41d0: 20 20 7b 32 30 33 39 2d 30 37 2d 30 31 20 30 37    {2039-07-01 07
41e0: 3a 30 30 3a 30 30 7d 0a 20 20 73 65 74 20 73 71  :00:00}.  set sq
41f0: 6c 69 74 65 5f 63 75 72 72 65 6e 74 5f 74 69 6d  lite_current_tim
4200: 65 20 5c 0a 20 20 20 20 20 5b 64 62 20 65 76 61  e \.     [db eva
4210: 6c 20 7b 53 45 4c 45 43 54 20 73 74 72 66 74 69  l {SELECT strfti
4220: 6d 65 28 27 25 73 27 2c 27 32 30 30 30 2d 30 37  me('%s','2000-07
4230: 2d 30 31 20 31 32 3a 33 34 3a 35 36 27 29 7d 5d  -01 12:34:56')}]
4240: 0a 20 20 64 61 74 65 74 65 73 74 20 36 2e 31 36  .  datetest 6.16
4250: 20 7b 64 61 74 65 74 69 6d 65 28 27 6e 6f 77 27   {datetime('now'
4260: 2c 27 6c 6f 63 61 6c 74 69 6d 65 27 29 7d 20 7b  ,'localtime')} {
4270: 32 30 30 30 2d 30 37 2d 30 31 20 30 38 3a 33 34  2000-07-01 08:34
4280: 3a 35 36 7d 0a 20 20 64 61 74 65 74 65 73 74 20  :56}.  datetest 
4290: 36 2e 31 37 20 7b 64 61 74 65 74 69 6d 65 28 27  6.17 {datetime('
42a0: 6e 6f 77 27 2c 27 6c 6f 63 61 6c 74 69 6d 65 78  now','localtimex
42b0: 27 29 7d 20 4e 55 4c 4c 0a 20 20 64 61 74 65 74  ')} NULL.  datet
42c0: 65 73 74 20 36 2e 31 38 20 7b 64 61 74 65 74 69  est 6.18 {dateti
42d0: 6d 65 28 27 6e 6f 77 27 2c 27 6c 6f 63 61 6c 74  me('now','localt
42e0: 69 6d 27 29 7d 20 4e 55 4c 4c 0a 20 20 73 65 74  im')} NULL.  set
42f0: 20 73 71 6c 69 74 65 5f 63 75 72 72 65 6e 74 5f   sqlite_current_
4300: 74 69 6d 65 20 30 0a 7d 0a 0a 23 20 54 68 65 73  time 0.}..# Thes
4310: 65 20 74 77 6f 20 61 72 65 20 61 20 62 69 74 20  e two are a bit 
4320: 6f 66 20 61 20 73 63 61 6d 2e 20 54 68 65 79 20  of a scam. They 
4330: 61 72 65 20 61 64 64 65 64 20 74 6f 20 65 6e 73  are added to ens
4340: 75 72 65 20 74 68 61 74 20 31 30 30 25 20 6f 66  ure that 100% of
4350: 0a 23 20 74 68 65 20 64 61 74 65 2e 63 20 66 69  .# the date.c fi
4360: 6c 65 20 69 73 20 63 6f 76 65 72 65 64 20 62 79  le is covered by
4370: 20 74 65 73 74 69 6e 67 2c 20 65 76 65 6e 20 77   testing, even w
4380: 68 65 6e 20 74 68 65 20 74 69 6d 65 2d 7a 6f 6e  hen the time-zon
4390: 65 0a 23 20 69 73 20 6e 6f 74 20 2d 30 34 30 30  e.# is not -0400
43a0: 20 28 74 68 65 20 63 6f 6e 64 69 74 69 6f 6e 20   (the condition 
43b0: 66 6f 72 20 72 75 6e 6e 69 6e 67 20 6f 66 20 74  for running of t
43c0: 68 65 20 62 6c 6f 63 6b 20 6f 66 20 74 65 73 74  he block of test
43d0: 73 20 61 62 6f 76 65 29 2e 0a 23 0a 64 61 74 65  s above)..#.date
43e0: 74 65 73 74 20 36 2e 31 39 20 7b 64 61 74 65 74  test 6.19 {datet
43f0: 69 6d 65 28 27 32 30 33 39 2d 30 37 2d 30 31 20  ime('2039-07-01 
4400: 31 32 3a 30 30 3a 30 30 27 2c 27 6c 6f 63 61 6c  12:00:00','local
4410: 74 69 6d 65 27 2c 6e 75 6c 6c 29 7d 20 4e 55 4c  time',null)} NUL
4420: 4c 0a 64 61 74 65 74 65 73 74 20 36 2e 32 30 20  L.datetest 6.20 
4430: 7b 64 61 74 65 74 69 6d 65 28 27 32 30 33 39 2d  {datetime('2039-
4440: 30 37 2d 30 31 20 31 32 3a 30 30 3a 30 30 27 2c  07-01 12:00:00',
4450: 27 75 74 63 27 2c 6e 75 6c 6c 29 7d 20 4e 55 4c  'utc',null)} NUL
4460: 4c 0a 0a 23 20 44 61 74 65 2d 74 69 6d 65 20 66  L..# Date-time f
4470: 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 63 6f  unctions that co
4480: 6e 74 61 69 6e 20 4e 55 4c 4c 20 61 72 67 75 6d  ntain NULL argum
4490: 65 6e 74 73 20 72 65 74 75 72 6e 20 61 20 4e 55  ents return a NU
44a0: 4c 4c 0a 23 20 72 65 73 75 6c 74 2e 0a 23 0a 64  LL.# result..#.d
44b0: 61 74 65 74 65 73 74 20 37 2e 31 20 7b 64 61 74  atetest 7.1 {dat
44c0: 65 74 69 6d 65 28 6e 75 6c 6c 29 7d 20 4e 55 4c  etime(null)} NUL
44d0: 4c 0a 64 61 74 65 74 65 73 74 20 37 2e 32 20 7b  L.datetest 7.2 {
44e0: 64 61 74 65 74 69 6d 65 28 27 6e 6f 77 27 2c 6e  datetime('now',n
44f0: 75 6c 6c 29 7d 20 4e 55 4c 4c 0a 64 61 74 65 74  ull)} NULL.datet
4500: 65 73 74 20 37 2e 33 20 7b 64 61 74 65 74 69 6d  est 7.3 {datetim
4510: 65 28 27 6e 6f 77 27 2c 27 6c 6f 63 61 6c 74 69  e('now','localti
4520: 6d 65 27 2c 6e 75 6c 6c 29 7d 20 4e 55 4c 4c 0a  me',null)} NULL.
4530: 64 61 74 65 74 65 73 74 20 37 2e 34 20 7b 74 69  datetest 7.4 {ti
4540: 6d 65 28 6e 75 6c 6c 29 7d 20 4e 55 4c 4c 0a 64  me(null)} NULL.d
4550: 61 74 65 74 65 73 74 20 37 2e 35 20 7b 74 69 6d  atetest 7.5 {tim
4560: 65 28 27 6e 6f 77 27 2c 6e 75 6c 6c 29 7d 20 4e  e('now',null)} N
4570: 55 4c 4c 0a 64 61 74 65 74 65 73 74 20 37 2e 36  ULL.datetest 7.6
4580: 20 7b 74 69 6d 65 28 27 6e 6f 77 27 2c 27 6c 6f   {time('now','lo
4590: 63 61 6c 74 69 6d 65 27 2c 6e 75 6c 6c 29 7d 20  caltime',null)} 
45a0: 4e 55 4c 4c 0a 64 61 74 65 74 65 73 74 20 37 2e  NULL.datetest 7.
45b0: 37 20 7b 64 61 74 65 28 6e 75 6c 6c 29 7d 20 4e  7 {date(null)} N
45c0: 55 4c 4c 0a 64 61 74 65 74 65 73 74 20 37 2e 38  ULL.datetest 7.8
45d0: 20 7b 64 61 74 65 28 27 6e 6f 77 27 2c 6e 75 6c   {date('now',nul
45e0: 6c 29 7d 20 4e 55 4c 4c 0a 64 61 74 65 74 65 73  l)} NULL.datetes
45f0: 74 20 37 2e 39 20 7b 64 61 74 65 28 27 6e 6f 77  t 7.9 {date('now
4600: 27 2c 27 6c 6f 63 61 6c 74 69 6d 65 27 2c 6e 75  ','localtime',nu
4610: 6c 6c 29 7d 20 4e 55 4c 4c 0a 64 61 74 65 74 65  ll)} NULL.datete
4620: 73 74 20 37 2e 31 30 20 7b 6a 75 6c 69 61 6e 64  st 7.10 {juliand
4630: 61 79 28 6e 75 6c 6c 29 7d 20 4e 55 4c 4c 0a 64  ay(null)} NULL.d
4640: 61 74 65 74 65 73 74 20 37 2e 31 31 20 7b 6a 75  atetest 7.11 {ju
4650: 6c 69 61 6e 64 61 79 28 27 6e 6f 77 27 2c 6e 75  lianday('now',nu
4660: 6c 6c 29 7d 20 4e 55 4c 4c 0a 64 61 74 65 74 65  ll)} NULL.datete
4670: 73 74 20 37 2e 31 32 20 7b 6a 75 6c 69 61 6e 64  st 7.12 {juliand
4680: 61 79 28 27 6e 6f 77 27 2c 27 6c 6f 63 61 6c 74  ay('now','localt
4690: 69 6d 65 27 2c 6e 75 6c 6c 29 7d 20 4e 55 4c 4c  ime',null)} NULL
46a0: 0a 64 61 74 65 74 65 73 74 20 37 2e 31 33 20 7b  .datetest 7.13 {
46b0: 73 74 72 66 74 69 6d 65 28 6e 75 6c 6c 2c 27 6e  strftime(null,'n
46c0: 6f 77 27 29 7d 20 4e 55 4c 4c 0a 64 61 74 65 74  ow')} NULL.datet
46d0: 65 73 74 20 37 2e 31 34 20 7b 73 74 72 66 74 69  est 7.14 {strfti
46e0: 6d 65 28 27 25 73 27 2c 6e 75 6c 6c 29 7d 20 4e  me('%s',null)} N
46f0: 55 4c 4c 0a 64 61 74 65 74 65 73 74 20 37 2e 31  ULL.datetest 7.1
4700: 35 20 7b 73 74 72 66 74 69 6d 65 28 27 25 73 27  5 {strftime('%s'
4710: 2c 27 6e 6f 77 27 2c 6e 75 6c 6c 29 7d 20 4e 55  ,'now',null)} NU
4720: 4c 4c 0a 64 61 74 65 74 65 73 74 20 37 2e 31 36  LL.datetest 7.16
4730: 20 7b 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c   {strftime('%s',
4740: 27 6e 6f 77 27 2c 27 6c 6f 63 61 6c 74 69 6d 65  'now','localtime
4750: 27 2c 6e 75 6c 6c 29 7d 20 4e 55 4c 4c 0a 0a 23  ',null)} NULL..#
4760: 20 54 65 73 74 20 6d 6f 64 69 66 69 65 72 73 20   Test modifiers 
4770: 77 68 65 6e 20 74 68 65 20 64 61 74 65 20 62 65  when the date be
4780: 67 69 6e 73 20 61 73 20 61 20 6a 75 6c 69 61 6e  gins as a julian
4790: 20 64 61 79 20 6e 75 6d 62 65 72 20 2d 20 74 6f   day number - to
47a0: 0a 23 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65  .# make sure the
47b0: 20 48 48 3a 4d 4d 3a 53 53 20 69 73 20 70 72 65   HH:MM:SS is pre
47c0: 73 65 72 76 65 64 2e 20 20 54 69 63 6b 65 74 20  served.  Ticket 
47d0: 23 35 35 31 2e 0a 23 0a 73 65 74 20 73 71 6c 69  #551..#.set sqli
47e0: 74 65 5f 63 75 72 72 65 6e 74 5f 74 69 6d 65 20  te_current_time 
47f0: 5b 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54  [db eval {SELECT
4800: 20 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27   strftime('%s','
4810: 32 30 30 33 2d 31 30 2d 32 32 20 31 32 3a 33 34  2003-10-22 12:34
4820: 3a 30 30 27 29 7d 5d 0a 64 61 74 65 74 65 73 74  :00')}].datetest
4830: 20 38 2e 31 20 7b 64 61 74 65 74 69 6d 65 28 27   8.1 {datetime('
4840: 6e 6f 77 27 2c 27 77 65 65 6b 64 61 79 20 30 27  now','weekday 0'
4850: 29 7d 20 7b 32 30 30 33 2d 31 30 2d 32 36 20 31  )} {2003-10-26 1
4860: 32 3a 33 34 3a 30 30 7d 0a 64 61 74 65 74 65 73  2:34:00}.datetes
4870: 74 20 38 2e 32 20 7b 64 61 74 65 74 69 6d 65 28  t 8.2 {datetime(
4880: 27 6e 6f 77 27 2c 27 77 65 65 6b 64 61 79 20 31  'now','weekday 1
4890: 27 29 7d 20 7b 32 30 30 33 2d 31 30 2d 32 37 20  ')} {2003-10-27 
48a0: 31 32 3a 33 34 3a 30 30 7d 0a 64 61 74 65 74 65  12:34:00}.datete
48b0: 73 74 20 38 2e 33 20 7b 64 61 74 65 74 69 6d 65  st 8.3 {datetime
48c0: 28 27 6e 6f 77 27 2c 27 77 65 65 6b 64 61 79 20  ('now','weekday 
48d0: 32 27 29 7d 20 7b 32 30 30 33 2d 31 30 2d 32 38  2')} {2003-10-28
48e0: 20 31 32 3a 33 34 3a 30 30 7d 0a 64 61 74 65 74   12:34:00}.datet
48f0: 65 73 74 20 38 2e 34 20 7b 64 61 74 65 74 69 6d  est 8.4 {datetim
4900: 65 28 27 6e 6f 77 27 2c 27 77 65 65 6b 64 61 79  e('now','weekday
4910: 20 33 27 29 7d 20 7b 32 30 30 33 2d 31 30 2d 32   3')} {2003-10-2
4920: 32 20 31 32 3a 33 34 3a 30 30 7d 0a 64 61 74 65  2 12:34:00}.date
4930: 74 65 73 74 20 38 2e 35 20 7b 64 61 74 65 74 69  test 8.5 {dateti
4940: 6d 65 28 27 6e 6f 77 27 2c 27 73 74 61 72 74 20  me('now','start 
4950: 6f 66 20 6d 6f 6e 74 68 27 29 7d 20 7b 32 30 30  of month')} {200
4960: 33 2d 31 30 2d 30 31 20 30 30 3a 30 30 3a 30 30  3-10-01 00:00:00
4970: 7d 0a 64 61 74 65 74 65 73 74 20 38 2e 36 20 7b  }.datetest 8.6 {
4980: 64 61 74 65 74 69 6d 65 28 27 6e 6f 77 27 2c 27  datetime('now','
4990: 73 74 61 72 74 20 6f 66 20 79 65 61 72 27 29 7d  start of year')}
49a0: 20 7b 32 30 30 33 2d 30 31 2d 30 31 20 30 30 3a   {2003-01-01 00:
49b0: 30 30 3a 30 30 7d 0a 64 61 74 65 74 65 73 74 20  00:00}.datetest 
49c0: 38 2e 37 20 7b 64 61 74 65 74 69 6d 65 28 27 6e  8.7 {datetime('n
49d0: 6f 77 27 2c 27 73 74 61 72 74 20 6f 66 20 64 61  ow','start of da
49e0: 79 27 29 7d 20 7b 32 30 30 33 2d 31 30 2d 32 32  y')} {2003-10-22
49f0: 20 30 30 3a 30 30 3a 30 30 7d 0a 64 61 74 65 74   00:00:00}.datet
4a00: 65 73 74 20 38 2e 38 20 7b 64 61 74 65 74 69 6d  est 8.8 {datetim
4a10: 65 28 27 6e 6f 77 27 2c 27 31 20 64 61 79 27 29  e('now','1 day')
4a20: 7d 20 7b 32 30 30 33 2d 31 30 2d 32 33 20 31 32  } {2003-10-23 12
4a30: 3a 33 34 3a 30 30 7d 0a 64 61 74 65 74 65 73 74  :34:00}.datetest
4a40: 20 38 2e 39 20 7b 64 61 74 65 74 69 6d 65 28 27   8.9 {datetime('
4a50: 6e 6f 77 27 2c 27 2b 31 20 64 61 79 27 29 7d 20  now','+1 day')} 
4a60: 7b 32 30 30 33 2d 31 30 2d 32 33 20 31 32 3a 33  {2003-10-23 12:3
4a70: 34 3a 30 30 7d 0a 64 61 74 65 74 65 73 74 20 38  4:00}.datetest 8
4a80: 2e 31 30 20 7b 64 61 74 65 74 69 6d 65 28 27 6e  .10 {datetime('n
4a90: 6f 77 27 2c 27 2b 31 2e 32 35 20 64 61 79 27 29  ow','+1.25 day')
4aa0: 7d 20 7b 32 30 30 33 2d 31 30 2d 32 33 20 31 38  } {2003-10-23 18
4ab0: 3a 33 34 3a 30 30 7d 0a 64 61 74 65 74 65 73 74  :34:00}.datetest
4ac0: 20 38 2e 31 31 20 7b 64 61 74 65 74 69 6d 65 28   8.11 {datetime(
4ad0: 27 6e 6f 77 27 2c 27 2d 31 2e 30 20 64 61 79 27  'now','-1.0 day'
4ae0: 29 7d 20 7b 32 30 30 33 2d 31 30 2d 32 31 20 31  )} {2003-10-21 1
4af0: 32 3a 33 34 3a 30 30 7d 0a 64 61 74 65 74 65 73  2:34:00}.datetes
4b00: 74 20 38 2e 31 32 20 7b 64 61 74 65 74 69 6d 65  t 8.12 {datetime
4b10: 28 27 6e 6f 77 27 2c 27 31 20 6d 6f 6e 74 68 27  ('now','1 month'
4b20: 29 7d 20 7b 32 30 30 33 2d 31 31 2d 32 32 20 31  )} {2003-11-22 1
4b30: 32 3a 33 34 3a 30 30 7d 0a 64 61 74 65 74 65 73  2:34:00}.datetes
4b40: 74 20 38 2e 31 33 20 7b 64 61 74 65 74 69 6d 65  t 8.13 {datetime
4b50: 28 27 6e 6f 77 27 2c 27 31 31 20 6d 6f 6e 74 68  ('now','11 month
4b60: 27 29 7d 20 7b 32 30 30 34 2d 30 39 2d 32 32 20  ')} {2004-09-22 
4b70: 31 32 3a 33 34 3a 30 30 7d 0a 64 61 74 65 74 65  12:34:00}.datete
4b80: 73 74 20 38 2e 31 34 20 7b 64 61 74 65 74 69 6d  st 8.14 {datetim
4b90: 65 28 27 6e 6f 77 27 2c 27 2d 31 33 20 6d 6f 6e  e('now','-13 mon
4ba0: 74 68 27 29 7d 20 7b 32 30 30 32 2d 30 39 2d 32  th')} {2002-09-2
4bb0: 32 20 31 32 3a 33 34 3a 30 30 7d 0a 64 61 74 65  2 12:34:00}.date
4bc0: 74 65 73 74 20 38 2e 31 35 20 7b 64 61 74 65 74  test 8.15 {datet
4bd0: 69 6d 65 28 27 6e 6f 77 27 2c 27 31 2e 35 20 6d  ime('now','1.5 m
4be0: 6f 6e 74 68 73 27 29 7d 20 7b 32 30 30 33 2d 31  onths')} {2003-1
4bf0: 32 2d 30 37 20 31 32 3a 33 34 3a 30 30 7d 0a 64  2-07 12:34:00}.d
4c00: 61 74 65 74 65 73 74 20 38 2e 31 36 20 7b 64 61  atetest 8.16 {da
4c10: 74 65 74 69 6d 65 28 27 6e 6f 77 27 2c 27 2d 35  tetime('now','-5
4c20: 20 79 65 61 72 73 27 29 7d 20 7b 31 39 39 38 2d   years')} {1998-
4c30: 31 30 2d 32 32 20 31 32 3a 33 34 3a 30 30 7d 0a  10-22 12:34:00}.
4c40: 64 61 74 65 74 65 73 74 20 38 2e 31 37 20 7b 64  datetest 8.17 {d
4c50: 61 74 65 74 69 6d 65 28 27 6e 6f 77 27 2c 27 2b  atetime('now','+
4c60: 31 30 2e 35 20 6d 69 6e 75 74 65 73 27 29 7d 20  10.5 minutes')} 
4c70: 7b 32 30 30 33 2d 31 30 2d 32 32 20 31 32 3a 34  {2003-10-22 12:4
4c80: 34 3a 33 30 7d 0a 64 61 74 65 74 65 73 74 20 38  4:30}.datetest 8
4c90: 2e 31 38 20 7b 64 61 74 65 74 69 6d 65 28 27 6e  .18 {datetime('n
4ca0: 6f 77 27 2c 27 2d 31 2e 32 35 20 68 6f 75 72 73  ow','-1.25 hours
4cb0: 27 29 7d 20 7b 32 30 30 33 2d 31 30 2d 32 32 20  ')} {2003-10-22 
4cc0: 31 31 3a 31 39 3a 30 30 7d 0a 64 61 74 65 74 65  11:19:00}.datete
4cd0: 73 74 20 38 2e 31 39 20 7b 64 61 74 65 74 69 6d  st 8.19 {datetim
4ce0: 65 28 27 6e 6f 77 27 2c 27 31 31 2e 32 35 20 73  e('now','11.25 s
4cf0: 65 63 6f 6e 64 73 27 29 7d 20 7b 32 30 30 33 2d  econds')} {2003-
4d00: 31 30 2d 32 32 20 31 32 3a 33 34 3a 31 31 7d 0a  10-22 12:34:11}.
4d10: 64 61 74 65 74 65 73 74 20 38 2e 39 30 20 7b 64  datetest 8.90 {d
4d20: 61 74 65 74 69 6d 65 28 27 6e 6f 77 27 2c 27 61  atetime('now','a
4d30: 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71  bcdefghijklmnopq
4d40: 72 73 74 75 76 77 79 78 7a 41 42 43 44 45 46 47  rstuvwyxzABCDEFG
4d50: 48 49 4a 4c 4d 4e 4f 50 27 29 7d 20 4e 55 4c 4c  HIJLMNOP')} NULL
4d60: 0a 73 65 74 20 73 71 6c 69 74 65 5f 63 75 72 72  .set sqlite_curr
4d70: 65 6e 74 5f 74 69 6d 65 20 30 0a 0a 23 20 4e 65  ent_time 0..# Ne
4d80: 67 61 74 69 76 65 20 79 65 61 72 73 20 77 6f 72  gative years wor
4d90: 6b 2e 20 20 45 78 61 6d 70 6c 65 3a 20 20 27 2d  k.  Example:  '-
4da0: 34 37 31 33 2d 31 31 2d 32 36 27 20 69 73 20 4a  4713-11-26' is J
4db0: 44 20 31 2e 35 2e 0a 23 0a 64 61 74 65 74 65 73  D 1.5..#.datetes
4dc0: 74 20 39 2e 31 20 7b 6a 75 6c 69 61 6e 64 61 79  t 9.1 {julianday
4dd0: 28 27 2d 34 37 31 33 2d 31 31 2d 32 34 20 31 32  ('-4713-11-24 12
4de0: 3a 30 30 3a 30 30 27 29 7d 20 7b 30 2e 30 7d 0a  :00:00')} {0.0}.
4df0: 64 61 74 65 74 65 73 74 20 39 2e 32 20 7b 6a 75  datetest 9.2 {ju
4e00: 6c 69 61 6e 64 61 79 28 64 61 74 65 74 69 6d 65  lianday(datetime
4e10: 28 35 29 29 7d 20 7b 35 2e 30 7d 0a 64 61 74 65  (5))} {5.0}.date
4e20: 74 65 73 74 20 39 2e 33 20 7b 6a 75 6c 69 61 6e  test 9.3 {julian
4e30: 64 61 79 28 64 61 74 65 74 69 6d 65 28 31 30 29  day(datetime(10)
4e40: 29 7d 20 7b 31 30 2e 30 7d 0a 64 61 74 65 74 65  )} {10.0}.datete
4e50: 73 74 20 39 2e 34 20 7b 6a 75 6c 69 61 6e 64 61  st 9.4 {julianda
4e60: 79 28 64 61 74 65 74 69 6d 65 28 31 30 30 29 29  y(datetime(100))
4e70: 7d 20 7b 31 30 30 2e 30 7d 0a 64 61 74 65 74 65  } {100.0}.datete
4e80: 73 74 20 39 2e 35 20 7b 6a 75 6c 69 61 6e 64 61  st 9.5 {julianda
4e90: 79 28 64 61 74 65 74 69 6d 65 28 31 30 30 30 29  y(datetime(1000)
4ea0: 29 7d 20 7b 31 30 30 30 2e 30 7d 0a 64 61 74 65  )} {1000.0}.date
4eb0: 74 65 73 74 20 39 2e 36 20 7b 6a 75 6c 69 61 6e  test 9.6 {julian
4ec0: 64 61 79 28 64 61 74 65 74 69 6d 65 28 31 30 30  day(datetime(100
4ed0: 30 30 29 29 7d 20 7b 31 30 30 30 30 2e 30 7d 0a  00))} {10000.0}.
4ee0: 64 61 74 65 74 65 73 74 20 39 2e 37 20 7b 6a 75  datetest 9.7 {ju
4ef0: 6c 69 61 6e 64 61 79 28 64 61 74 65 74 69 6d 65  lianday(datetime
4f00: 28 31 30 30 30 30 30 29 29 7d 20 7b 31 30 30 30  (100000))} {1000
4f10: 30 30 2e 30 7d 0a 0a 23 20 64 61 74 65 74 69 6d  00.0}..# datetim
4f20: 65 28 29 20 77 69 74 68 20 6a 75 73 74 20 61 6e  e() with just an
4f30: 20 48 48 3a 4d 4d 3a 53 53 20 63 6f 72 72 65 63   HH:MM:SS correc
4f40: 74 6c 79 20 69 6e 73 65 72 74 73 20 74 68 65 20  tly inserts the 
4f50: 64 61 74 65 20 32 30 30 30 2d 30 31 2d 30 31 2e  date 2000-01-01.
4f60: 0a 23 0a 64 61 74 65 74 65 73 74 20 31 30 2e 31  .#.datetest 10.1
4f70: 20 7b 64 61 74 65 74 69 6d 65 28 27 30 31 3a 30   {datetime('01:0
4f80: 32 3a 30 33 27 29 7d 20 20 7b 32 30 30 30 2d 30  2:03')}  {2000-0
4f90: 31 2d 30 31 20 30 31 3a 30 32 3a 30 33 7d 0a 64  1-01 01:02:03}.d
4fa0: 61 74 65 74 65 73 74 20 31 30 2e 32 20 7b 64 61  atetest 10.2 {da
4fb0: 74 65 28 27 30 31 3a 30 32 3a 30 33 27 29 7d 20  te('01:02:03')} 
4fc0: 20 7b 32 30 30 30 2d 30 31 2d 30 31 7d 0a 64 61   {2000-01-01}.da
4fd0: 74 65 74 65 73 74 20 31 30 2e 33 20 7b 73 74 72  tetest 10.3 {str
4fe0: 66 74 69 6d 65 28 27 25 59 2d 25 6d 2d 25 64 20  ftime('%Y-%m-%d 
4ff0: 25 48 3a 25 4d 27 2c 27 30 31 3a 30 32 3a 30 33  %H:%M','01:02:03
5000: 27 29 7d 20 7b 32 30 30 30 2d 30 31 2d 30 31 20  ')} {2000-01-01 
5010: 30 31 3a 30 32 7d 0a 0a 23 20 54 65 73 74 20 74  01:02}..# Test t
5020: 68 65 20 6e 65 77 20 48 48 3a 4d 4d 3a 53 53 20  he new HH:MM:SS 
5030: 6d 6f 64 69 66 69 65 72 0a 23 0a 64 61 74 65 74  modifier.#.datet
5040: 65 73 74 20 31 31 2e 31 20 7b 64 61 74 65 74 69  est 11.1 {dateti
5050: 6d 65 28 27 32 30 30 34 2d 30 32 2d 32 38 20 32  me('2004-02-28 2
5060: 30 3a 30 30 3a 30 30 27 2c 20 27 2d 30 31 3a 32  0:00:00', '-01:2
5070: 30 3a 33 30 27 29 7d 20 5c 0a 20 20 20 7b 32 30  0:30')} \.   {20
5080: 30 34 2d 30 32 2d 32 38 20 31 38 3a 33 39 3a 33  04-02-28 18:39:3
5090: 30 7d 0a 64 61 74 65 74 65 73 74 20 31 31 2e 32  0}.datetest 11.2
50a0: 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30 34   {datetime('2004
50b0: 2d 30 32 2d 32 38 20 32 30 3a 30 30 3a 30 30 27  -02-28 20:00:00'
50c0: 2c 20 27 2b 31 32 3a 33 30 3a 30 30 27 29 7d 20  , '+12:30:00')} 
50d0: 5c 0a 20 20 20 7b 32 30 30 34 2d 30 32 2d 32 39  \.   {2004-02-29
50e0: 20 30 38 3a 33 30 3a 30 30 7d 0a 64 61 74 65 74   08:30:00}.datet
50f0: 65 73 74 20 31 31 2e 33 20 7b 64 61 74 65 74 69  est 11.3 {dateti
5100: 6d 65 28 27 32 30 30 34 2d 30 32 2d 32 38 20 32  me('2004-02-28 2
5110: 30 3a 30 30 3a 30 30 27 2c 20 27 2b 31 32 3a 33  0:00:00', '+12:3
5120: 30 27 29 7d 20 5c 0a 20 20 20 7b 32 30 30 34 2d  0')} \.   {2004-
5130: 30 32 2d 32 39 20 30 38 3a 33 30 3a 30 30 7d 0a  02-29 08:30:00}.
5140: 64 61 74 65 74 65 73 74 20 31 31 2e 34 20 7b 64  datetest 11.4 {d
5150: 61 74 65 74 69 6d 65 28 27 32 30 30 34 2d 30 32  atetime('2004-02
5160: 2d 32 38 20 32 30 3a 30 30 3a 30 30 27 2c 20 27  -28 20:00:00', '
5170: 31 32 3a 33 30 27 29 7d 20 5c 0a 20 20 20 7b 32  12:30')} \.   {2
5180: 30 30 34 2d 30 32 2d 32 39 20 30 38 3a 33 30 3a  004-02-29 08:30:
5190: 30 30 7d 0a 64 61 74 65 74 65 73 74 20 31 31 2e  00}.datetest 11.
51a0: 35 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30  5 {datetime('200
51b0: 34 2d 30 32 2d 32 38 20 32 30 3a 30 30 3a 30 30  4-02-28 20:00:00
51c0: 27 2c 20 27 2d 31 32 3a 30 30 27 29 7d 20 5c 0a  ', '-12:00')} \.
51d0: 20 20 20 7b 32 30 30 34 2d 30 32 2d 32 38 20 30     {2004-02-28 0
51e0: 38 3a 30 30 3a 30 30 7d 0a 64 61 74 65 74 65 73  8:00:00}.datetes
51f0: 74 20 31 31 2e 36 20 7b 64 61 74 65 74 69 6d 65  t 11.6 {datetime
5200: 28 27 32 30 30 34 2d 30 32 2d 32 38 20 32 30 3a  ('2004-02-28 20:
5210: 30 30 3a 30 30 27 2c 20 27 2d 31 32 3a 30 31 27  00:00', '-12:01'
5220: 29 7d 20 5c 0a 20 20 20 7b 32 30 30 34 2d 30 32  )} \.   {2004-02
5230: 2d 32 38 20 30 37 3a 35 39 3a 30 30 7d 0a 64 61  -28 07:59:00}.da
5240: 74 65 74 65 73 74 20 31 31 2e 37 20 7b 64 61 74  tetest 11.7 {dat
5250: 65 74 69 6d 65 28 27 32 30 30 34 2d 30 32 2d 32  etime('2004-02-2
5260: 38 20 32 30 3a 30 30 3a 30 30 27 2c 20 27 2d 31  8 20:00:00', '-1
5270: 31 3a 35 39 27 29 7d 20 5c 0a 20 20 20 7b 32 30  1:59')} \.   {20
5280: 30 34 2d 30 32 2d 32 38 20 30 38 3a 30 31 3a 30  04-02-28 08:01:0
5290: 30 7d 0a 64 61 74 65 74 65 73 74 20 31 31 2e 38  0}.datetest 11.8
52a0: 20 7b 64 61 74 65 74 69 6d 65 28 27 32 30 30 34   {datetime('2004
52b0: 2d 30 32 2d 32 38 20 32 30 3a 30 30 3a 30 30 27  -02-28 20:00:00'
52c0: 2c 20 27 31 31 3a 35 39 27 29 7d 20 5c 0a 20 20  , '11:59')} \.  
52d0: 20 7b 32 30 30 34 2d 30 32 2d 32 39 20 30 37 3a   {2004-02-29 07:
52e0: 35 39 3a 30 30 7d 0a 64 61 74 65 74 65 73 74 20  59:00}.datetest 
52f0: 31 31 2e 39 20 7b 64 61 74 65 74 69 6d 65 28 27  11.9 {datetime('
5300: 32 30 30 34 2d 30 32 2d 32 38 20 32 30 3a 30 30  2004-02-28 20:00
5310: 3a 30 30 27 2c 20 27 31 32 3a 30 31 27 29 7d 20  :00', '12:01')} 
5320: 5c 0a 20 20 20 7b 32 30 30 34 2d 30 32 2d 32 39  \.   {2004-02-29
5330: 20 30 38 3a 30 31 3a 30 30 7d 0a 64 61 74 65 74   08:01:00}.datet
5340: 65 73 74 20 31 31 2e 31 30 20 7b 64 61 74 65 74  est 11.10 {datet
5350: 69 6d 65 28 27 32 30 30 34 2d 30 32 2d 32 38 20  ime('2004-02-28 
5360: 32 30 3a 30 30 3a 30 30 27 2c 20 27 31 32 3a 36  20:00:00', '12:6
5370: 30 27 29 7d 20 4e 55 4c 4c 0a 0a 23 20 54 69 63  0')} NULL..# Tic
5380: 6b 65 74 20 23 31 39 36 34 0a 64 61 74 65 74 65  ket #1964.datete
5390: 73 74 20 31 32 2e 31 20 7b 64 61 74 65 74 69 6d  st 12.1 {datetim
53a0: 65 28 27 32 30 30 35 2d 30 39 2d 30 31 27 29 7d  e('2005-09-01')}
53b0: 20 7b 32 30 30 35 2d 30 39 2d 30 31 20 30 30 3a   {2005-09-01 00:
53c0: 30 30 3a 30 30 7d 0a 64 61 74 65 74 65 73 74 20  00:00}.datetest 
53d0: 31 32 2e 32 20 7b 64 61 74 65 74 69 6d 65 28 27  12.2 {datetime('
53e0: 32 30 30 35 2d 30 39 2d 30 31 27 2c 27 2b 30 20  2005-09-01','+0 
53f0: 68 6f 75 72 73 27 29 7d 20 7b 32 30 30 35 2d 30  hours')} {2005-0
5400: 39 2d 30 31 20 30 30 3a 30 30 3a 30 30 7d 0a 0a  9-01 00:00:00}..
5410: 23 20 54 69 63 6b 65 74 20 23 31 39 39 31 0a 64  # Ticket #1991.d
5420: 6f 5f 74 65 73 74 20 64 61 74 65 2d 31 33 2e 31  o_test date-13.1
5430: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
5440: 20 20 20 53 45 4c 45 43 54 20 73 74 72 66 74 69     SELECT strfti
5450: 6d 65 28 27 25 59 2d 25 6d 2d 25 64 20 25 48 3a  me('%Y-%m-%d %H:
5460: 25 4d 3a 25 66 27 2c 20 6a 75 6c 69 61 6e 64 61  %M:%f', julianda
5470: 79 28 27 32 30 30 36 2d 30 39 2d 32 34 54 31 30  y('2006-09-24T10
5480: 3a 35 30 3a 32 36 2e 30 34 37 27 29 29 0a 20 20  :50:26.047')).  
5490: 7d 0a 7d 20 7b 7b 32 30 30 36 2d 30 39 2d 32 34  }.} {{2006-09-24
54a0: 20 31 30 3a 35 30 3a 32 36 2e 30 34 37 7d 7d 0a   10:50:26.047}}.
54b0: 0a 23 20 54 69 63 6b 65 74 20 23 32 31 35 33 0a  .# Ticket #2153.
54c0: 64 61 74 65 74 65 73 74 20 31 33 2e 32 20 7b 73  datetest 13.2 {s
54d0: 74 72 66 74 69 6d 65 28 27 25 59 2d 25 6d 2d 25  trftime('%Y-%m-%
54e0: 64 20 25 48 3a 25 4d 3a 25 53 27 2c 20 27 32 30  d %H:%M:%S', '20
54f0: 30 37 2d 30 31 2d 30 31 20 31 32 3a 33 34 3a 35  07-01-01 12:34:5
5500: 39 2e 36 27 29 7d 20 5c 0a 20 20 7b 32 30 30 37  9.6')} \.  {2007
5510: 2d 30 31 2d 30 31 20 31 32 3a 33 34 3a 35 39 7d  -01-01 12:34:59}
5520: 0a 64 61 74 65 74 65 73 74 20 31 33 2e 33 20 7b  .datetest 13.3 {
5530: 73 74 72 66 74 69 6d 65 28 27 25 59 2d 25 6d 2d  strftime('%Y-%m-
5540: 25 64 20 25 48 3a 25 4d 3a 25 66 27 2c 20 27 32  %d %H:%M:%f', '2
5550: 30 30 37 2d 30 31 2d 30 31 20 31 32 3a 33 34 3a  007-01-01 12:34:
5560: 35 39 2e 36 27 29 7d 20 5c 0a 20 20 7b 32 30 30  59.6')} \.  {200
5570: 37 2d 30 31 2d 30 31 20 31 32 3a 33 34 3a 35 39  7-01-01 12:34:59
5580: 2e 36 30 30 7d 0a 64 61 74 65 74 65 73 74 20 31  .600}.datetest 1
5590: 33 2e 34 20 7b 73 74 72 66 74 69 6d 65 28 27 25  3.4 {strftime('%
55a0: 59 2d 25 6d 2d 25 64 20 25 48 3a 25 4d 3a 25 53  Y-%m-%d %H:%M:%S
55b0: 27 2c 20 27 32 30 30 37 2d 30 31 2d 30 31 20 31  ', '2007-01-01 1
55c0: 32 3a 35 39 3a 35 39 2e 36 27 29 7d 20 5c 0a 20  2:59:59.6')} \. 
55d0: 20 7b 32 30 30 37 2d 30 31 2d 30 31 20 31 32 3a   {2007-01-01 12:
55e0: 35 39 3a 35 39 7d 0a 64 61 74 65 74 65 73 74 20  59:59}.datetest 
55f0: 31 33 2e 35 20 7b 73 74 72 66 74 69 6d 65 28 27  13.5 {strftime('
5600: 25 59 2d 25 6d 2d 25 64 20 25 48 3a 25 4d 3a 25  %Y-%m-%d %H:%M:%
5610: 66 27 2c 20 27 32 30 30 37 2d 30 31 2d 30 31 20  f', '2007-01-01 
5620: 31 32 3a 35 39 3a 35 39 2e 36 27 29 7d 20 5c 0a  12:59:59.6')} \.
5630: 20 20 7b 32 30 30 37 2d 30 31 2d 30 31 20 31 32    {2007-01-01 12
5640: 3a 35 39 3a 35 39 2e 36 30 30 7d 0a 64 61 74 65  :59:59.600}.date
5650: 74 65 73 74 20 31 33 2e 36 20 7b 73 74 72 66 74  test 13.6 {strft
5660: 69 6d 65 28 27 25 59 2d 25 6d 2d 25 64 20 25 48  ime('%Y-%m-%d %H
5670: 3a 25 4d 3a 25 53 27 2c 20 27 32 30 30 37 2d 30  :%M:%S', '2007-0
5680: 31 2d 30 31 20 32 33 3a 35 39 3a 35 39 2e 36 27  1-01 23:59:59.6'
5690: 29 7d 20 5c 0a 20 20 7b 32 30 30 37 2d 30 31 2d  )} \.  {2007-01-
56a0: 30 31 20 32 33 3a 35 39 3a 35 39 7d 0a 64 61 74  01 23:59:59}.dat
56b0: 65 74 65 73 74 20 31 33 2e 37 20 7b 73 74 72 66  etest 13.7 {strf
56c0: 74 69 6d 65 28 27 25 59 2d 25 6d 2d 25 64 20 25  time('%Y-%m-%d %
56d0: 48 3a 25 4d 3a 25 66 27 2c 20 27 32 30 30 37 2d  H:%M:%f', '2007-
56e0: 30 31 2d 30 31 20 32 33 3a 35 39 3a 35 39 2e 36  01-01 23:59:59.6
56f0: 27 29 7d 20 5c 0a 20 20 7b 32 30 30 37 2d 30 31  ')} \.  {2007-01
5700: 2d 30 31 20 32 33 3a 35 39 3a 35 39 2e 36 30 30  -01 23:59:59.600
5710: 7d 0a 0a 23 20 54 69 63 6b 65 74 20 23 33 36 31  }..# Ticket #361
5720: 38 0a 64 61 74 65 74 65 73 74 20 31 33 2e 31 31  8.datetest 13.11
5730: 20 7b 6a 75 6c 69 61 6e 64 61 79 28 32 34 35 34   {julianday(2454
5740: 38 33 32 2e 35 2c 27 2d 31 20 64 61 79 27 29 7d  832.5,'-1 day')}
5750: 20 7b 32 34 35 34 38 33 31 2e 35 7d 0a 64 61 74   {2454831.5}.dat
5760: 65 74 65 73 74 20 31 33 2e 31 32 20 7b 6a 75 6c  etest 13.12 {jul
5770: 69 61 6e 64 61 79 28 32 34 35 34 38 33 32 2e 35  ianday(2454832.5
5780: 2c 27 2b 31 20 64 61 79 27 29 7d 20 7b 32 34 35  ,'+1 day')} {245
5790: 34 38 33 33 2e 35 7d 0a 64 61 74 65 74 65 73 74  4833.5}.datetest
57a0: 20 31 33 2e 31 33 20 7b 6a 75 6c 69 61 6e 64 61   13.13 {julianda
57b0: 79 28 32 34 35 34 38 33 32 2e 35 2c 27 2d 31 2e  y(2454832.5,'-1.
57c0: 35 20 64 61 79 27 29 7d 20 7b 32 34 35 34 38 33  5 day')} {245483
57d0: 31 2e 30 7d 0a 64 61 74 65 74 65 73 74 20 31 33  1.0}.datetest 13
57e0: 2e 31 34 20 7b 6a 75 6c 69 61 6e 64 61 79 28 32  .14 {julianday(2
57f0: 34 35 34 38 33 32 2e 35 2c 27 2b 31 2e 35 20 64  454832.5,'+1.5 d
5800: 61 79 27 29 7d 20 7b 32 34 35 34 38 33 34 2e 30  ay')} {2454834.0
5810: 7d 0a 64 61 74 65 74 65 73 74 20 31 33 2e 31 35  }.datetest 13.15
5820: 20 7b 6a 75 6c 69 61 6e 64 61 79 28 32 34 35 34   {julianday(2454
5830: 38 33 32 2e 35 2c 27 2d 33 20 68 6f 75 72 73 27  832.5,'-3 hours'
5840: 29 7d 20 7b 32 34 35 34 38 33 32 2e 33 37 35 7d  )} {2454832.375}
5850: 0a 64 61 74 65 74 65 73 74 20 31 33 2e 31 36 20  .datetest 13.16 
5860: 7b 6a 75 6c 69 61 6e 64 61 79 28 32 34 35 34 38  {julianday(24548
5870: 33 32 2e 35 2c 27 2b 33 20 68 6f 75 72 73 27 29  32.5,'+3 hours')
5880: 7d 20 7b 32 34 35 34 38 33 32 2e 36 32 35 7d 0a  } {2454832.625}.
5890: 64 61 74 65 74 65 73 74 20 31 33 2e 31 37 20 7b  datetest 13.17 {
58a0: 6a 75 6c 69 61 6e 64 61 79 28 32 34 35 34 38 33  julianday(245483
58b0: 32 2e 35 2c 27 2d 34 35 20 6d 69 6e 75 74 65 73  2.5,'-45 minutes
58c0: 27 29 7d 20 7b 32 34 35 34 38 33 32 2e 34 36 38  ')} {2454832.468
58d0: 37 35 7d 0a 64 61 74 65 74 65 73 74 20 31 33 2e  75}.datetest 13.
58e0: 31 38 20 7b 6a 75 6c 69 61 6e 64 61 79 28 32 34  18 {julianday(24
58f0: 35 34 38 33 32 2e 35 2c 27 2b 34 35 20 6d 69 6e  54832.5,'+45 min
5900: 75 74 65 73 27 29 7d 20 7b 32 34 35 34 38 33 32  utes')} {2454832
5910: 2e 35 33 31 32 35 7d 0a 64 61 74 65 74 65 73 74  .53125}.datetest
5920: 20 31 33 2e 31 39 20 7b 6a 75 6c 69 61 6e 64 61   13.19 {julianda
5930: 79 28 32 34 35 34 38 33 32 2e 35 2c 27 2d 36 37  y(2454832.5,'-67
5940: 35 20 73 65 63 6f 6e 64 73 27 29 7d 20 7b 32 34  5 seconds')} {24
5950: 35 34 38 33 32 2e 34 39 32 31 38 37 35 7d 0a 64  54832.4921875}.d
5960: 61 74 65 74 65 73 74 20 31 33 2e 32 30 20 7b 6a  atetest 13.20 {j
5970: 75 6c 69 61 6e 64 61 79 28 32 34 35 34 38 33 32  ulianday(2454832
5980: 2e 35 2c 27 2b 36 37 35 20 73 65 63 6f 6e 64 73  .5,'+675 seconds
5990: 27 29 7d 20 7b 32 34 35 34 38 33 32 2e 35 30 37  ')} {2454832.507
59a0: 38 31 32 35 7d 0a 64 61 74 65 74 65 73 74 20 31  8125}.datetest 1
59b0: 33 2e 32 31 20 7b 6a 75 6c 69 61 6e 64 61 79 28  3.21 {julianday(
59c0: 32 34 35 34 38 33 32 2e 35 2c 27 2d 31 2e 35 20  2454832.5,'-1.5 
59d0: 6d 6f 6e 74 68 73 27 29 7d 20 7b 32 34 35 34 37  months')} {24547
59e0: 38 36 2e 35 7d 0a 64 61 74 65 74 65 73 74 20 31  86.5}.datetest 1
59f0: 33 2e 32 32 20 7b 6a 75 6c 69 61 6e 64 61 79 28  3.22 {julianday(
5a00: 32 34 35 34 38 33 32 2e 35 2c 27 2b 31 2e 35 20  2454832.5,'+1.5 
5a10: 6d 6f 6e 74 68 73 27 29 7d 20 7b 32 34 35 34 38  months')} {24548
5a20: 37 38 2e 35 7d 0a 64 61 74 65 74 65 73 74 20 31  78.5}.datetest 1
5a30: 33 2e 32 33 20 7b 6a 75 6c 69 61 6e 64 61 79 28  3.23 {julianday(
5a40: 32 34 35 34 38 33 32 2e 35 2c 27 2d 31 2e 35 20  2454832.5,'-1.5 
5a50: 79 65 61 72 73 27 29 7d 20 7b 32 34 35 34 32 38  years')} {245428
5a60: 34 2e 30 7d 0a 64 61 74 65 74 65 73 74 20 31 33  4.0}.datetest 13
5a70: 2e 32 34 20 7b 6a 75 6c 69 61 6e 64 61 79 28 32  .24 {julianday(2
5a80: 34 35 34 38 33 32 2e 35 2c 27 2b 31 2e 35 20 79  454832.5,'+1.5 y
5a90: 65 61 72 73 27 29 7d 20 7b 32 34 35 35 33 38 30  ears')} {2455380
5aa0: 2e 30 7d 0a 0a 64 61 74 65 74 65 73 74 20 31 33  .0}..datetest 13
5ab0: 2e 33 30 20 7b 64 61 74 65 28 27 32 30 30 30 2d  .30 {date('2000-
5ac0: 30 31 2d 30 31 27 2c 27 2b 31 2e 35 20 79 65 61  01-01','+1.5 yea
5ad0: 72 73 27 29 7d 20 7b 32 30 30 31 2d 30 37 2d 30  rs')} {2001-07-0
5ae0: 32 7d 0a 64 61 74 65 74 65 73 74 20 31 33 2e 33  2}.datetest 13.3
5af0: 31 20 7b 64 61 74 65 28 27 32 30 30 31 2d 30 31  1 {date('2001-01
5b00: 2d 30 31 27 2c 27 2b 31 2e 35 20 79 65 61 72 73  -01','+1.5 years
5b10: 27 29 7d 20 7b 32 30 30 32 2d 30 37 2d 30 32 7d  ')} {2002-07-02}
5b20: 0a 64 61 74 65 74 65 73 74 20 31 33 2e 33 32 20  .datetest 13.32 
5b30: 7b 64 61 74 65 28 27 32 30 30 32 2d 30 31 2d 30  {date('2002-01-0
5b40: 31 27 2c 27 2b 31 2e 35 20 79 65 61 72 73 27 29  1','+1.5 years')
5b50: 7d 20 7b 32 30 30 33 2d 30 37 2d 30 32 7d 0a 64  } {2003-07-02}.d
5b60: 61 74 65 74 65 73 74 20 31 33 2e 33 33 20 7b 64  atetest 13.33 {d
5b70: 61 74 65 28 27 32 30 30 32 2d 30 31 2d 30 31 27  ate('2002-01-01'
5b80: 2c 27 2d 31 2e 35 20 79 65 61 72 73 27 29 7d 20  ,'-1.5 years')} 
5b90: 7b 32 30 30 30 2d 30 37 2d 30 32 7d 0a 64 61 74  {2000-07-02}.dat
5ba0: 65 74 65 73 74 20 31 33 2e 33 34 20 7b 64 61 74  etest 13.34 {dat
5bb0: 65 28 27 32 30 30 31 2d 30 31 2d 30 31 27 2c 27  e('2001-01-01','
5bc0: 2d 31 2e 35 20 79 65 61 72 73 27 29 7d 20 7b 31  -1.5 years')} {1
5bd0: 39 39 39 2d 30 37 2d 30 32 7d 0a 0a 23 20 54 65  999-07-02}..# Te
5be0: 73 74 20 66 6f 72 20 69 73 73 75 65 73 20 72 65  st for issues re
5bf0: 70 6f 72 74 65 64 20 62 79 20 42 61 72 65 46 65  ported by BareFe
5c00: 65 74 20 28 6c 69 73 74 2e 73 71 6c 20 61 74 20  et (list.sql at 
5c10: 74 61 6e 64 62 2e 63 6f 6d 2e 61 75 29 0a 23 20  tandb.com.au).# 
5c20: 6f 6e 20 6d 61 69 6c 69 6e 67 20 6c 69 73 74 20  on mailing list 
5c30: 6f 6e 20 32 30 30 38 2d 30 36 2d 31 32 2e 0a 23  on 2008-06-12..#
5c40: 0a 23 20 50 75 74 20 61 20 66 6c 6f 61 74 69 6e  .# Put a floatin
5c50: 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72 20 69  g point number i
5c60: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  n the database s
5c70: 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20 6d 61  o that we can ma
5c80: 6e 69 70 75 6c 61 74 65 0a 23 20 72 61 77 20 62  nipulate.# raw b
5c90: 69 74 73 20 75 73 69 6e 67 20 74 68 65 20 68 65  its using the he
5ca0: 78 69 6f 20 69 6e 74 65 72 66 61 63 65 2e 0a 23  xio interface..#
5cb0: 0a 69 66 20 7b 30 3d 3d 5b 73 71 6c 69 74 65 33  .if {0==[sqlite3
5cc0: 20 2d 68 61 73 2d 63 6f 64 65 63 5d 7d 20 7b 0a   -has-codec]} {.
5cd0: 20 20 64 6f 5f 74 65 73 74 20 64 61 74 65 2d 31    do_test date-1
5ce0: 34 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71  4.1 {.    execsq
5cf0: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
5d00: 20 61 75 74 6f 5f 76 61 63 75 75 6d 3d 4f 46 46   auto_vacuum=OFF
5d10: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 70  ;.      PRAGMA p
5d20: 61 67 65 5f 73 69 7a 65 20 3d 20 31 30 32 34 3b  age_size = 1024;
5d30: 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41  .      CREATE TA
5d40: 42 4c 45 20 74 31 28 78 29 3b 0a 20 20 20 20 20  BLE t1(x);.     
5d50: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
5d60: 56 41 4c 55 45 53 28 31 2e 31 29 3b 0a 20 20 20  VALUES(1.1);.   
5d70: 20 7d 0a 20 20 20 20 64 62 20 63 6c 6f 73 65 0a   }.    db close.
5d80: 20 20 20 20 68 65 78 69 6f 5f 77 72 69 74 65 20      hexio_write 
5d90: 74 65 73 74 2e 64 62 20 32 30 34 30 20 34 31 34  test.db 2040 414
5da0: 32 62 61 33 32 62 66 66 66 66 66 66 39 0a 20 20  2ba32bffffff9.  
5db0: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
5dc0: 74 2e 64 62 0a 20 20 20 20 64 62 20 65 76 61 6c  t.db.    db eval
5dd0: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
5de0: 74 31 7d 0a 20 20 7d 20 7b 32 34 35 34 36 32 39  t1}.  } {2454629
5df0: 2e 35 7d 0a 20 20 0a 20 20 23 20 43 68 61 6e 67  .5}.  .  # Chang
5e00: 69 6e 67 20 74 68 65 20 6c 65 61 73 74 20 73 69  ing the least si
5e10: 67 6e 69 66 69 63 61 6e 74 20 62 79 74 65 20 6f  gnificant byte o
5e20: 66 20 74 68 65 20 66 6c 6f 61 74 69 6e 67 20 70  f the floating p
5e30: 6f 69 6e 74 20 76 61 6c 75 65 20 62 65 74 77 65  oint value betwe
5e40: 65 6e 0a 20 20 23 20 30 30 20 61 6e 64 20 46 46  en.  # 00 and FF
5e50: 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 67   should always g
5e60: 65 6e 65 72 61 74 65 20 61 20 74 69 6d 65 20 6f  enerate a time o
5e70: 66 20 65 69 74 68 65 72 20 32 33 3a 35 39 3a 35  f either 23:59:5
5e80: 39 20 6f 72 20 30 30 3a 30 30 3a 30 30 2c 0a 20  9 or 00:00:00,. 
5e90: 20 23 20 6e 65 76 65 72 20 32 34 3a 30 30 3a 30   # never 24:00:0
5ea0: 30 0a 20 20 23 0a 20 20 66 6f 72 20 7b 73 65 74  0.  #.  for {set
5eb0: 20 69 20 30 7d 20 7b 24 69 3c 3d 32 35 35 7d 20   i 0} {$i<=255} 
5ec0: 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 64  {incr i} {.    d
5ed0: 62 20 63 6c 6f 73 65 0a 20 20 20 20 68 65 78 69  b close.    hexi
5ee0: 6f 5f 77 72 69 74 65 20 74 65 73 74 2e 64 62 20  o_write test.db 
5ef0: 32 30 34 37 20 5b 66 6f 72 6d 61 74 20 25 30 32  2047 [format %02
5f00: 78 20 24 69 5d 0a 20 20 20 20 73 71 6c 69 74 65  x $i].    sqlite
5f10: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20  3 db test.db.   
5f20: 20 64 6f 5f 74 65 73 74 20 64 61 74 65 2d 31 34   do_test date-14
5f30: 2e 32 2e 24 69 20 7b 0a 20 20 20 20 20 20 73 65  .2.$i {.      se
5f40: 74 20 64 61 74 65 20 5b 64 62 20 6f 6e 65 20 7b  t date [db one {
5f50: 53 45 4c 45 43 54 20 64 61 74 65 74 69 6d 65 28  SELECT datetime(
5f60: 78 29 20 46 52 4f 4d 20 74 31 7d 5d 0a 20 20 20  x) FROM t1}].   
5f70: 20 20 20 65 78 70 72 20 7b 24 64 61 74 65 20 65     expr {$date e
5f80: 71 20 22 32 30 30 38 2d 30 36 2d 31 32 20 30 30  q "2008-06-12 00
5f90: 3a 30 30 3a 30 30 22 20 7c 7c 20 24 64 61 74 65  :00:00" || $date
5fa0: 20 65 71 20 22 32 30 30 38 2d 30 36 2d 31 31 20   eq "2008-06-11 
5fb0: 32 33 3a 35 39 3a 35 39 22 7d 0a 20 20 20 20 7d  23:59:59"}.    }
5fc0: 20 7b 31 7d 0a 20 20 7d 0a 7d 0a 0a 23 20 56 65   {1}.  }.}..# Ve
5fd0: 72 69 66 79 20 74 68 61 74 20 6d 75 6c 74 69 70  rify that multip
5fe0: 6c 65 20 63 61 6c 6c 73 20 74 6f 20 64 61 74 65  le calls to date
5ff0: 20 66 75 6e 63 74 69 6f 6e 73 20 77 69 74 68 20   functions with 
6000: 27 6e 6f 77 27 20 72 65 74 75 72 6e 20 74 68 65  'now' return the
6010: 0a 23 20 73 61 6d 65 20 61 6e 73 77 65 72 2e 0a  .# same answer..
6020: 23 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  #.# EVIDENCE-OF:
6030: 20 52 2d 33 34 38 31 38 2d 31 33 36 36 34 20 54   R-34818-13664 T
6040: 68 65 20 27 6e 6f 77 27 20 61 72 67 75 6d 65 6e  he 'now' argumen
6050: 74 20 74 6f 20 64 61 74 65 20 61 6e 64 20 74 69  t to date and ti
6060: 6d 65 0a 23 20 66 75 6e 63 74 69 6f 6e 73 20 61  me.# functions a
6070: 6c 77 61 79 73 20 72 65 74 75 72 6e 73 20 65 78  lways returns ex
6080: 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 76  actly the same v
6090: 61 6c 75 65 20 66 6f 72 20 6d 75 6c 74 69 70 6c  alue for multipl
60a0: 65 0a 23 20 69 6e 76 6f 63 61 74 69 6f 6e 73 20  e.# invocations 
60b0: 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20  within the same 
60c0: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 63  sqlite3_step() c
60d0: 61 6c 6c 2e 0a 23 0a 70 72 6f 63 20 73 6c 65 65  all..#.proc slee
60e0: 70 65 72 20 7b 7d 20 7b 61 66 74 65 72 20 31 30  per {} {after 10
60f0: 30 7d 0a 64 6f 5f 74 65 73 74 20 64 61 74 65 2d  0}.do_test date-
6100: 31 35 2e 31 20 7b 0a 20 20 64 62 20 66 75 6e 63  15.1 {.  db func
6110: 20 73 6c 65 65 70 65 72 20 73 6c 65 65 70 65 72   sleeper sleeper
6120: 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20  .  db eval {.   
6130: 20 20 53 45 4c 45 43 54 20 63 20 2d 20 61 20 46    SELECT c - a F
6140: 52 4f 4d 20 28 53 45 4c 45 43 54 20 6a 75 6c 69  ROM (SELECT juli
6150: 61 6e 64 61 79 28 27 6e 6f 77 27 29 20 41 53 20  anday('now') AS 
6160: 61 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  a,.             
6170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6180: 20 20 73 6c 65 65 70 65 72 28 29 2c 20 6a 75 6c    sleeper(), jul
6190: 69 61 6e 64 61 79 28 27 6e 6f 77 27 29 20 41 53  ianday('now') AS
61a0: 20 63 29 3b 0a 20 20 7d 0a 7d 20 7b 30 2e 30 7d   c);.  }.} {0.0}
61b0: 0a 64 6f 5f 74 65 73 74 20 64 61 74 65 2d 31 35  .do_test date-15
61c0: 2e 32 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  .2 {.  db eval {
61d0: 0a 20 20 20 20 20 53 45 4c 45 43 54 20 61 3d 3d  .     SELECT a==
61e0: 62 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 63  b FROM (SELECT c
61f0: 75 72 72 65 6e 74 5f 74 69 6d 65 73 74 61 6d 70  urrent_timestamp
6200: 20 41 53 20 61 2c 0a 20 20 20 20 20 20 20 20 20   AS a,.         
6210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6220: 20 20 20 20 20 20 73 6c 65 65 70 65 72 28 29 2c        sleeper(),
6230: 20 63 75 72 72 65 6e 74 5f 74 69 6d 65 73 74 61   current_timesta
6240: 6d 70 20 41 53 20 62 29 3b 0a 20 20 7d 0a 7d 20  mp AS b);.  }.} 
6250: 7b 31 7d 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74  {1}..finish_test
6260: 0a                                               .