summaryrefslogtreecommitdiffstats
path: root/generic
diff options
context:
space:
mode:
Diffstat (limited to 'generic')
-rw-r--r--generic/tclClockFmt.c56
1 files changed, 31 insertions, 25 deletions
diff --git a/generic/tclClockFmt.c b/generic/tclClockFmt.c
index 09cbfa4..ba924fd 100644
--- a/generic/tclClockFmt.c
+++ b/generic/tclClockFmt.c
@@ -1147,41 +1147,47 @@ ClockScan(
goto not_match;
}
- /* invalidate result */
- if (flags & CLF_DATE) {
+ /*
+ * Invalidate result
+ */
+
+ /* seconds token (%s) take precedence over all other tokens */
+ if ((opts->flags & CLF_EXTENDED) || !(flags & CLF_LOCALSEC)) {
+ if (flags & CLF_DATE) {
- if (!(flags & CLF_JULIANDAY)) {
- info->flags |= CLF_INVALIDATE_SECONDS|CLF_INVALIDATE_JULIANDAY;
+ if (!(flags & CLF_JULIANDAY)) {
+ info->flags |= CLF_INVALIDATE_SECONDS|CLF_INVALIDATE_JULIANDAY;
- if (yyYear < 100) {
- if (!(flags & CLF_CENTURY)) {
- if (yyYear >= dataPtr->yearOfCenturySwitch) {
- yyYear -= 100;
+ if (yyYear < 100) {
+ if (!(flags & CLF_CENTURY)) {
+ if (yyYear >= dataPtr->yearOfCenturySwitch) {
+ yyYear -= 100;
+ }
+ yyYear += dataPtr->currentYearCentury;
+ } else {
+ yyYear += info->dateCentury * 100;
}
- yyYear += dataPtr->currentYearCentury;
- } else {
- yyYear += info->dateCentury * 100;
}
+ yydate.era = CE;
+ }
+ /* if date but no time - reset time */
+ if (!(flags & (CLF_TIME|CLF_LOCALSEC))) {
+ info->flags |= CLF_INVALIDATE_SECONDS;
+ yydate.localSeconds = 0;
}
- yydate.era = CE;
}
- /* if date but no time - reset time */
- if (!(flags & (CLF_TIME|CLF_LOCALSEC))) {
+
+ if (flags & CLF_TIME) {
+ info->flags |= CLF_INVALIDATE_SECONDS;
+ yySeconds = ToSeconds(yyHour, yyMinutes,
+ yySeconds, yyMeridian);
+ } else
+ if (!(flags & CLF_LOCALSEC)) {
info->flags |= CLF_INVALIDATE_SECONDS;
- yydate.localSeconds = 0;
+ yySeconds = yydate.localSeconds % SECONDS_PER_DAY;
}
}
- if (flags & CLF_TIME) {
- info->flags |= CLF_INVALIDATE_SECONDS;
- yySeconds = ToSeconds(yyHour, yyMinutes,
- yySeconds, yyMeridian);
- } else
- if (!(flags & CLF_LOCALSEC)) {
- info->flags |= CLF_INVALIDATE_SECONDS;
- yySeconds = yydate.localSeconds % SECONDS_PER_DAY;
- }
-
ret = TCL_OK;
goto done;