/ Hex Artifact Content
Login

Artifact 0b8473ed9ab6fd4283b4a01f035e1067762ba734:


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