From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Emanuel Berg Newsgroups: gmane.emacs.devel Subject: convert time into HH:MM:SS.sss Date: Tue, 09 Apr 2024 05:49:31 +0200 Message-ID: <87pluz19h0.fsf@dataswamp.org> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="33219"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) To: emacs-devel@gnu.org Cancel-Lock: sha1:9ljHDrZpy632Ln1WszNnyFtdwjA= Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Tue Apr 09 06:35:40 2024 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ru3Cu-0008PH-Eh for ged-emacs-devel@m.gmane-mx.org; Tue, 09 Apr 2024 06:35:40 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ru3CX-0007NL-1V; Tue, 09 Apr 2024 00:35:17 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ru2UZ-0008UY-Dw for emacs-devel@gnu.org; Mon, 08 Apr 2024 23:49:51 -0400 Original-Received: from ciao.gmane.io ([116.202.254.214]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ru2UX-0001aS-MJ for emacs-devel@gnu.org; Mon, 08 Apr 2024 23:49:51 -0400 Original-Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1ru2UU-0000cc-MP for emacs-devel@gnu.org; Tue, 09 Apr 2024 05:49:46 +0200 X-Injected-Via-Gmane: http://gmane.org/ Mail-Followup-To: emacs-devel@gnu.org Mail-Copies-To: never Received-SPF: pass client-ip=116.202.254.214; envelope-from=ged-emacs-devel@m.gmane-mx.org; helo=ciao.gmane.io X-Spam_score_int: -16 X-Spam_score: -1.7 X-Spam_bar: - X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=0.248, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Tue, 09 Apr 2024 00:35:08 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:317637 Archived-At: HH:MM:SS, MM:SS.sss and MM:SS are converted into HH:MM:SS.sss in the below code. But for example HH:MM:SS:ss isn't given an extra zero at the end. That can be dealt with as well using the same method, just more cases are needed. It is absolutely doable, it is just that too many cases is often a sign one should think in a new way instead of just adding more and more. One can also think - should one do anything about for example H:M:S.sss - which is also easy, just left-pad zeroes to incomplete data - but, maybe one shouldn't bother trying to rescue what is likely incorrect input from the user to begin with? Another thing one maybe would like is to warn for bogus time, that is more than 59 minutes and the same for seconds seconds. Maybe one shouldn't do this with regexps to begin with, instead read data as data as one goes along, warn for bogus data, and print it back with the desire format when assessed? This is what happens right now: ;; 11:22:33.444 -> 11:22:33.444 (complete so no change) ;; 11:22:33 -> 11:22:33.000 (add milliseconds) ;; 22:33.444 -> 00:22:33.444 (add hours) ;; 22:33 -> 00:22:33.000 (add hours and milliseconds) ;;; -*- lexical-binding: t -*- (defun convert-time () "Convert incomplete time data, that is all of either HH:MM:SS, MM:SS.sss or MM:SS, into HH:MM:SS.sss. When converting, pad with zero hours (00:) and/or zero milliseconds (.000)." (interactive) (goto-char (point-min)) (while (re-search-forward "\\([[:digit:]]\\{2\\}:[[:digit:]]\\{2\\}\\)" nil t) (goto-char (match-beginning 0)) (if (looking-at "[[:digit:]]\\{2\\}:[[:digit:]]\\{2\\}:[[:digit:]]\\{2\\}.[[:digit:]]\\{3\\}") (goto-char (match-end 0)) (if (looking-at "\\([[:digit:]]\\{2\\}:[[:digit:]]\\{2\\}:[[:digit:]]\\{2\\}\\)") (replace-match "\\1.000") (if (looking-at "\\([[:digit:]]\\{2\\}:[[:digit:]]\\{2\\}.[[:digit:]]\\{3\\}\\)") (replace-match "00:\\1") (replace-match "00:\\1.000") ))))) (defalias 'ct #'convert-time) ;; 11:22:33.444 -> 11:22:33.444 (complete so no change) ;; 11:22:33 -> 11:22:33.000 (add milliseconds) ;; 22:33.444 -> 00:22:33.444 (add hours) ;; 22:33 -> 00:22:33.000 (add hours and milliseconds) -- underground experts united https://dataswamp.org/~incal