Artifact
a311648345cb8a10cea580763e22f99829c40c9b56fce5004a2f17552a7c41a1:
Attachment "00655c867eab.diff" to
ticket [00655c867e]
added by
chrstphrchvz
2023-05-09 21:16:27.
0000: 64 69 66 66 20 2d 2d 67 69 74 20 67 65 6e 65 72 diff --git gener
0010: 69 63 2f 74 63 6c 43 6c 6f 63 6b 2e 63 20 67 65 ic/tclClock.c ge
0020: 6e 65 72 69 63 2f 74 63 6c 43 6c 6f 63 6b 2e 63 neric/tclClock.c
0030: 0a 69 6e 64 65 78 20 64 33 37 39 37 36 32 30 34 .index d37976204
0040: 32 2e 2e 38 34 33 35 34 31 61 39 39 64 20 31 30 2..843541a99d 10
0050: 30 36 34 34 0a 2d 2d 2d 20 67 65 6e 65 72 69 63 0644.--- generic
0060: 2f 74 63 6c 43 6c 6f 63 6b 2e 63 0a 2b 2b 2b 20 /tclClock.c.+++
0070: 67 65 6e 65 72 69 63 2f 74 63 6c 43 6c 6f 63 6b generic/tclClock
0080: 2e 63 0a 40 40 20 2d 34 36 36 2c 31 31 20 2b 34 .c.@@ -466,11 +4
0090: 36 36 2c 31 33 20 40 40 20 43 6c 6f 63 6b 47 65 66,13 @@ ClockGe
00a0: 74 64 61 74 65 66 69 65 6c 64 73 4f 62 6a 43 6d tdatefieldsObjCm
00b0: 64 28 0a 20 20 20 20 20 7d 0a 20 0a 20 20 20 20 d(. }. .
00c0: 20 2f 2a 0a 2d 20 20 20 20 20 2a 20 45 78 74 72 /*.- * Extr
00d0: 61 63 74 20 4a 75 6c 69 61 6e 20 64 61 79 2e 0a act Julian day..
00e0: 2b 20 20 20 20 20 2a 20 45 78 74 72 61 63 74 20 + * Extract
00f0: 4a 75 6c 69 61 6e 20 64 61 79 2e 20 41 6c 77 61 Julian day. Alwa
0100: 79 73 20 72 6f 75 6e 64 20 74 68 65 20 71 75 6f ys round the quo
0110: 74 69 65 6e 74 20 64 6f 77 6e 20 62 79 20 73 75 tient down by su
0120: 62 74 72 61 63 74 69 6e 67 20 31 0a 2b 20 20 20 btracting 1.+
0130: 20 20 2a 20 77 68 65 6e 20 74 68 65 20 72 65 6d * when the rem
0140: 61 69 6e 64 65 72 20 69 73 20 6e 65 67 61 74 69 ainder is negati
0150: 76 65 20 28 69 2e 65 2e 20 69 66 20 74 68 65 20 ve (i.e. if the
0160: 71 75 6f 74 69 65 6e 74 20 77 61 73 20 72 6f 75 quotient was rou
0170: 6e 64 65 64 20 75 70 29 2e 0a 20 20 20 20 20 20 nded up)..
0180: 2a 2f 0a 20 0a 2d 20 20 20 20 66 69 65 6c 64 73 */. .- fields
0190: 2e 6a 75 6c 69 61 6e 44 61 79 20 3d 20 28 69 6e .julianDay = (in
01a0: 74 29 20 28 28 66 69 65 6c 64 73 2e 6c 6f 63 61 t) ((fields.loca
01b0: 6c 53 65 63 6f 6e 64 73 20 2b 20 4a 55 4c 49 41 lSeconds + JULIA
01c0: 4e 5f 53 45 43 5f 50 4f 53 49 58 5f 45 50 4f 43 N_SEC_POSIX_EPOC
01d0: 48 29 0a 2d 09 20 20 20 20 2f 20 53 45 43 4f 4e H).-. / SECON
01e0: 44 53 5f 50 45 52 5f 44 41 59 29 3b 0a 2b 20 20 DS_PER_DAY);.+
01f0: 20 20 66 69 65 6c 64 73 2e 6a 75 6c 69 61 6e 44 fields.julianD
0200: 61 79 20 3d 20 28 69 6e 74 29 20 28 28 66 69 65 ay = (int) ((fie
0210: 6c 64 73 2e 6c 6f 63 61 6c 53 65 63 6f 6e 64 73 lds.localSeconds
0220: 20 2f 20 53 45 43 4f 4e 44 53 5f 50 45 52 5f 44 / SECONDS_PER_D
0230: 41 59 29 20 2d 0a 2b 09 20 20 20 20 28 28 66 69 AY) -.+. ((fi
0240: 65 6c 64 73 2e 6c 6f 63 61 6c 53 65 63 6f 6e 64 elds.localSecond
0250: 73 20 25 20 53 45 43 4f 4e 44 53 5f 50 45 52 5f s % SECONDS_PER_
0260: 44 41 59 29 20 3c 20 30 29 20 2b 0a 2b 09 20 20 DAY) < 0) +.+.
0270: 20 20 4a 55 4c 49 41 4e 5f 44 41 59 5f 50 4f 53 JULIAN_DAY_POS
0280: 49 58 5f 45 50 4f 43 48 29 3b 0a 20 0a 20 20 20 IX_EPOCH);. .
0290: 20 20 2f 2a 0a 20 20 20 20 20 20 2a 20 43 6f 6e /*. * Con
02a0: 76 65 72 74 20 74 6f 20 4a 75 6c 69 61 6e 20 6f vert to Julian o
02b0: 72 20 47 72 65 67 6f 72 69 61 6e 20 63 61 6c 65 r Gregorian cale
02c0: 6e 64 61 72 2e 0a 64 69 66 66 20 2d 2d 67 69 74 ndar..diff --git
02d0: 20 74 65 73 74 73 2f 63 6c 6f 63 6b 2e 74 65 73 tests/clock.tes
02e0: 74 20 74 65 73 74 73 2f 63 6c 6f 63 6b 2e 74 65 t tests/clock.te
02f0: 73 74 0a 69 6e 64 65 78 20 63 33 30 66 65 61 33 st.index c30fea3
0300: 62 38 35 2e 2e 37 64 36 30 39 37 37 63 33 31 20 b85..7d60977c31
0310: 31 30 30 36 34 34 0a 2d 2d 2d 20 74 65 73 74 73 100644.--- tests
0320: 2f 63 6c 6f 63 6b 2e 74 65 73 74 0a 2b 2b 2b 20 /clock.test.+++
0330: 74 65 73 74 73 2f 63 6c 6f 63 6b 2e 74 65 73 74 tests/clock.test
0340: 0a 40 40 20 2d 31 38 36 30 30 2c 36 20 2b 31 38 .@@ -18600,6 +18
0350: 36 30 30 2c 32 30 20 40 40 20 74 65 73 74 20 63 600,20 @@ test c
0360: 6c 6f 63 6b 2d 37 2e 39 20 7b 4a 75 6c 69 61 6e lock-7.9 {Julian
0370: 20 44 61 79 2c 20 74 77 6f 20 76 61 6c 75 65 73 Day, two values
0380: 7d 20 7b 0a 20 20 20 20 20 63 6c 6f 63 6b 20 73 } {. clock s
0390: 63 61 6e 20 7b 32 34 34 30 35 38 38 20 32 34 34 can {2440588 244
03a0: 30 35 38 39 7d 20 2d 66 6f 72 6d 61 74 20 7b 25 0589} -format {%
03b0: 4a 20 25 4a 7d 20 2d 67 6d 74 20 74 72 75 65 0a J %J} -gmt true.
03c0: 20 7d 20 38 36 34 30 30 0a 20 0a 2b 74 65 73 74 } 86400. .+test
03d0: 20 63 6c 6f 63 6b 2d 37 2e 31 30 20 7b 4a 75 6c clock-7.10 {Jul
03e0: 69 61 6e 20 44 61 79 2c 20 6e 65 67 61 74 69 76 ian Day, negativ
03f0: 65 20 61 6d 6f 75 6e 74 7d 20 7b 0a 2b 20 20 20 e amount} {.+
0400: 20 23 20 4e 6f 74 65 3a 20 25 4a 20 64 6f 65 73 # Note: %J does
0410: 20 6e 6f 74 20 61 63 63 65 70 74 20 6e 65 67 61 not accept nega
0420: 74 69 76 65 20 69 6e 70 75 74 3b 0a 2b 20 20 20 tive input;.+
0430: 20 23 20 61 64 64 20 6e 65 67 61 74 69 76 65 20 # add negative
0440: 61 6d 6f 75 6e 74 73 20 74 6f 20 4a 75 6c 69 61 amounts to Julia
0450: 6e 20 64 61 79 20 30 20 69 6e 73 74 65 61 64 0a n day 0 instead.
0460: 2b 20 20 20 20 73 65 74 20 73 30 20 5b 63 6c 6f + set s0 [clo
0470: 63 6b 20 73 63 61 6e 20 30 20 2d 66 6f 72 6d 61 ck scan 0 -forma
0480: 74 20 25 4a 20 2d 67 6d 74 20 74 72 75 65 5d 0a t %J -gmt true].
0490: 2b 20 20 20 20 73 65 74 20 4a 30 20 5b 73 63 61 + set J0 [sca
04a0: 6e 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 n [clock format
04b0: 24 73 30 20 2d 66 6f 72 6d 61 74 20 25 4a 20 2d $s0 -format %J -
04c0: 67 6d 74 20 74 72 75 65 5d 20 25 6c 6c 64 5d 0a gmt true] %lld].
04d0: 2b 20 20 20 20 73 65 74 20 73 30 6d 31 64 20 5b + set s0m1d [
04e0: 63 6c 6f 63 6b 20 61 64 64 20 24 73 30 20 2d 31 clock add $s0 -1
04f0: 20 64 61 79 73 5d 0a 2b 20 20 20 20 73 65 74 20 days].+ set
0500: 73 30 6d 32 34 68 20 5b 63 6c 6f 63 6b 20 61 64 s0m24h [clock ad
0510: 64 20 24 73 30 20 2d 32 34 20 68 6f 75 72 73 5d d $s0 -24 hours]
0520: 0a 2b 20 20 20 20 73 65 74 20 4a 30 6d 32 34 68 .+ set J0m24h
0530: 20 5b 73 63 61 6e 20 5b 63 6c 6f 63 6b 20 66 6f [scan [clock fo
0540: 72 6d 61 74 20 24 73 30 6d 32 34 68 20 2d 66 6f rmat $s0m24h -fo
0550: 72 6d 61 74 20 25 4a 20 2d 67 6d 74 20 74 72 75 rmat %J -gmt tru
0560: 65 5d 20 25 6c 6c 64 5d 0a 2b 20 20 20 20 73 65 e] %lld].+ se
0570: 74 20 73 30 6d 31 73 20 5b 63 6c 6f 63 6b 20 61 t s0m1s [clock a
0580: 64 64 20 24 73 30 20 2d 31 20 73 65 63 6f 6e 64 dd $s0 -1 second
0590: 73 5d 0a 2b 20 20 20 20 73 65 74 20 4a 30 6d 31 s].+ set J0m1
05a0: 73 20 5b 73 63 61 6e 20 5b 63 6c 6f 63 6b 20 66 s [scan [clock f
05b0: 6f 72 6d 61 74 20 24 73 30 6d 31 73 20 2d 66 6f ormat $s0m1s -fo
05c0: 72 6d 61 74 20 25 4a 20 2d 67 6d 74 20 74 72 75 rmat %J -gmt tru
05d0: 65 5d 20 25 6c 6c 64 5d 0a 2b 20 20 20 20 6c 69 e] %lld].+ li
05e0: 73 74 20 24 73 30 6d 31 64 20 24 73 30 6d 32 34 st $s0m1d $s0m24
05f0: 68 20 24 4a 30 6d 32 34 68 20 24 73 30 6d 31 73 h $J0m24h $s0m1s
0600: 20 24 4a 30 6d 31 73 20 24 73 30 20 24 4a 30 20 $J0m1s $s0 $J0
0610: 5c 0a 2b 09 5b 3a 3a 74 63 6c 3a 3a 6d 61 74 68 \.+.[::tcl::math
0620: 6f 70 3a 3a 3d 3d 20 24 73 30 6d 31 64 20 24 73 op::== $s0m1d $s
0630: 30 6d 32 34 68 5d 20 5b 3a 3a 74 63 6c 3a 3a 6d 0m24h] [::tcl::m
0640: 61 74 68 6f 70 3a 3a 3d 3d 20 24 4a 30 6d 32 34 athop::== $J0m24
0650: 68 20 24 4a 30 6d 31 73 5d 0a 2b 7d 20 5b 6c 69 h $J0m1s].+} [li
0660: 73 74 20 2d 32 31 30 38 36 36 38 38 39 36 30 30 st -210866889600
0670: 20 2d 32 31 30 38 36 36 38 38 39 36 30 30 20 2d -210866889600 -
0680: 31 20 2d 32 31 30 38 36 36 38 30 33 32 30 31 20 1 -210866803201
0690: 2d 31 20 2d 32 31 30 38 36 36 38 30 33 32 30 30 -1 -210866803200
06a0: 20 30 20 31 20 31 5d 0a 2b 0a 20 23 20 42 45 47 0 1 1].+. # BEG
06b0: 49 4e 20 74 65 73 74 63 61 73 65 73 38 0a 20 0a IN testcases8. .
06c0: 20 23 20 54 65 73 74 20 70 61 72 73 69 6e 67 20 # Test parsing
06d0: 6f 66 20 63 63 79 79 6d 6d 64 64 0a of ccyymmdd.