diff --git a/doc/lispintro/emacs-lisp-intro.texi b/doc/lispintro/emacs-lisp-intro.texi index 0b0c0a167d9..1a1518b2c51 100644 --- a/doc/lispintro/emacs-lisp-intro.texi +++ b/doc/lispintro/emacs-lisp-intro.texi @@ -15599,7 +15599,7 @@ like this: (recursive-lengths-list-many-files (files-in-below-directory "/usr/local/src/emacs/lisp/")) '<) - (insert (format "%s" (current-time-string)))) + (insert (current-time-string))) @end ignore @node Counting function definitions diff --git a/doc/lispref/os.texi b/doc/lispref/os.texi index 41753859e50..60697f2e29f 100644 --- a/doc/lispref/os.texi +++ b/doc/lispref/os.texi @@ -1313,9 +1313,10 @@ This function returns the current time and date as a human-readable string. The format does not vary for the initial part of the string, which contains the day of week, month, day of month, and time of day in that order: the number of characters used for these fields is -always the same, so you can reliably -use @code{substring} to extract them. You should count -characters from the beginning of the string rather than from the end, +always the same, although (unless you require English weekday or +month abbreviations regardless of locale) it is typically more +convenient to use @code{format-time-string} than to extract +fields from the output of @code{current-time-string}, as the year might not have exactly four digits, and additional information may some day be added at the end. diff --git a/lisp/arc-mode.el b/lisp/arc-mode.el index 068702bc71b..9d63a2a579a 100644 --- a/lisp/arc-mode.el +++ b/lisp/arc-mode.el @@ -637,7 +637,7 @@ the mode is invalid. If ERROR is nil then nil will be returned." (defun archive-unixdate (low high) "Stringify Unix (LOW HIGH) date." - (let* ((time (cons high low)) + (let* ((time (list high low)) (str (current-time-string time))) (format "%s-%s-%s" (substring str 8 10) @@ -646,8 +646,7 @@ the mode is invalid. If ERROR is nil then nil will be returned." (defun archive-unixtime (low high) "Stringify Unix (LOW HIGH) time." - (let ((str (current-time-string (cons high low)))) - (substring str 11 19))) + (format-time-string "%H:%M:%S" (list high low))) (defun archive-get-lineno () (if (>= (point) archive-file-list-start) diff --git a/lisp/calc/calc-forms.el b/lisp/calc/calc-forms.el index f7586288ca2..ccd52d370d1 100644 --- a/lisp/calc/calc-forms.el +++ b/lisp/calc/calc-forms.el @@ -37,13 +37,11 @@ (defun calc-time () (interactive) (calc-wrapper - (let ((time (current-time-string))) + (let ((time (decode-time))) (calc-enter-result 0 "time" (list 'mod (list 'hms - (string-to-number (substring time 11 13)) - (string-to-number (substring time 14 16)) - (string-to-number (substring time 17 19))) + (nth 2 time) (nth 1 time) (nth 0 time)) (list 'hms 24 0 0)))))) (defun calc-to-hms (arg) @@ -1341,16 +1339,15 @@ as measured in the integer number of days before December 31, 1 BC (Gregorian)." (math-parse-iso-date-validate isoyear isoweek isoweekday hour minute second))))) (defun calcFunc-now (&optional zone) - (let ((date (let ((calc-date-format nil)) - (math-parse-date (current-time-string))))) - (if (consp date) - (if zone - (math-add date (math-div (math-sub (calcFunc-tzone nil date) - (calcFunc-tzone zone date)) - '(float 864 2))) - date) - (calc-record-why "*Unable to interpret current date from system") - (append (list 'calcFunc-now) (and zone (list zone)))))) + (let ((date (let ((now (decode-time))) + (list 'date (math-dt-to-date + (list (nth 5 now) (nth 4 now) (nth 3 now) + (nth 2 now) (nth 1 now) (nth 0 now))))))) + (if zone + (math-add date (math-div (math-sub (calcFunc-tzone nil date) + (calcFunc-tzone zone date)) + '(float 864 2))) + date))) (defun calcFunc-year (date) (car (math-date-to-dt date))) diff --git a/lisp/calendar/todo-mode.el b/lisp/calendar/todo-mode.el index 41fe57e60ce..145cf78e6de 100644 --- a/lisp/calendar/todo-mode.el +++ b/lisp/calendar/todo-mode.el @@ -1931,7 +1931,7 @@ their associated keys and their effects." (calendar-current-date) t t)))) (time-string (or (and time (todo-read-time)) (and todo-always-add-time-string - (substring (current-time-string) 11 16))))) + (format-time-string "%H:%M"))))) (setq todo-date-from-calendar nil) (find-file-noselect file 'nowarn) (set-window-buffer (selected-window) @@ -2881,8 +2881,7 @@ visible." (not marked)) (let* ((date-string (calendar-date-string (calendar-current-date) t t)) (time-string (if todo-always-add-time-string - (concat " " (substring (current-time-string) - 11 16)) + (format-time-string " %H:%M") "")) (done-prefix (concat "[" todo-done-string date-string time-string "] ")) @@ -6091,7 +6090,7 @@ the empty string (i.e., no time string)." (while (not valid) (setq answer (read-string "Enter a clock time: " nil nil (when todo-always-add-time-string - (substring (current-time-string) 11 16)))) + (format-time-string "%H:%M")))) (when (or (string= "" answer) (string-match diary-time-regexp answer)) (setq valid t))) diff --git a/lisp/emacs-lisp/cl-extra.el b/lisp/emacs-lisp/cl-extra.el index 13988db9a86..78484fcfa3f 100644 --- a/lisp/emacs-lisp/cl-extra.el +++ b/lisp/emacs-lisp/cl-extra.el @@ -438,9 +438,7 @@ as an integer unless JUNK-ALLOWED is non-nil." ;; Random numbers. (defun cl--random-time () - (let* ((time (copy-sequence (current-time-string))) (i (length time)) (v 0)) - (while (>= (cl-decf i) 0) (setq v (+ (* v 3) (aref time i)))) - v)) + (car (encode-time nil t))) ;;;###autoload (autoload 'cl-random-state-p "cl-extra") (cl-defstruct (cl--random-state diff --git a/lisp/gnus/gnus-score.el b/lisp/gnus/gnus-score.el index 327cc69392d..f777163cc31 100644 --- a/lisp/gnus/gnus-score.el +++ b/lisp/gnus/gnus-score.el @@ -1501,7 +1501,7 @@ If FORMAT, also format the current score file." (when (and gnus-summary-default-score scores) (let* ((entries gnus-header-index) - (now (date-to-day (current-time-string))) + (now (time-to-days (current-time))) (expire (and gnus-score-expiry-days (- now gnus-score-expiry-days))) (headers gnus-newsgroup-headers) @@ -2380,7 +2380,7 @@ score in `gnus-newsgroup-scored' by SCORE." (memq 'word gnus-newsgroup-adaptive)) (with-temp-buffer (let* ((hashtb (gnus-make-hashtable 1000)) - (date (date-to-day (current-time-string))) + (date (time-to-days (current-time))) (data gnus-newsgroup-data) word d score val) (with-syntax-table gnus-adaptive-word-syntax-table diff --git a/src/timefns.c b/src/timefns.c index f527d5ed7fd..58dda1c7061 100644 --- a/src/timefns.c +++ b/src/timefns.c @@ -1475,7 +1475,6 @@ usage: (encode-time &optional TIME FORM &rest OBSOLESCENT-ARGUMENTS) */) { if (6 < nargs) zone = args[nargs - 1]; - form = Qnil; tm.tm_sec = check_tm_member (a, 0); tm.tm_min = check_tm_member (args[1], 0); tm.tm_hour = check_tm_member (args[2], 0);