• Login
Community
  • Login

12-hour to 24-hour clock conversion

Scheduled Pinned Locked Moved Help wanted · · · – – – · · ·
21 Posts 5 Posters 3.2k Views
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S
    Sophia Cruz
    last edited by May 17, 2019, 4:00 PM

    I want to convert a 12-hour clock to 24-hour clock up to the ms.

    Example: Today is 12:00:00:001 AM and it’s raining.
    Output: Today is 00:00:00:001 and it’s raining.

    E 1 Reply Last reply May 17, 2019, 4:41 PM Reply Quote 1
    • E
      Ekopalypse @Sophia Cruz
      last edited by May 17, 2019, 4:41 PM

      @Sophia-Cruz

      check regular expression in replace dialog and use
      find what: (\d{1,2})(:\d{1,2}:\d{1,2}:\d{1,3}) AM
      and replace with 00\2

      1 Reply Last reply Reply Quote 1
      • S
        Sophia Cruz
        last edited by May 17, 2019, 5:05 PM

        @Ekopalypse thanks for the answer but what if it’s multiple numbers in AM and PM, and the separator will be from . to :? Regex won’t work for other numbers.

        Example:
        01.25.31.934 PM -> 13:25:31:934
        04.02.28.421 AM -> 04:02:28:421
        09.55.03.732 PM -> 21:55:03:732

        E 1 Reply Last reply May 17, 2019, 5:10 PM Reply Quote 1
        • E
          Ekopalypse @Sophia Cruz
          last edited by May 17, 2019, 5:10 PM

          @Sophia-Cruz

          would you mind clarifying the exact format of your data as this is essential for
          regular expressions to work correctly. For example, in the previous request you used :
          to separate time fields and now you are using a dot.

          S 1 Reply Last reply May 17, 2019, 5:19 PM Reply Quote 2
          • A
            Alan Kilborn
            last edited by May 17, 2019, 5:16 PM

            Related cross-link: https://notepad-plus-plus.org/community/topic/16854/convert-24-hour-military-time-to-12-hour-time

            S 1 Reply Last reply May 17, 2019, 5:22 PM Reply Quote 3
            • S
              Sophia Cruz @Ekopalypse
              last edited by May 17, 2019, 5:19 PM

              @Ekopalypse I’m sorry I wasn’t clear with my question. I’m really looking for an answer for my 2nd request. I posted the 1st one because I was still trying different regex which would answer my 2nd request and I was hoping I could formulate something with the answer that you provided.

              1 Reply Last reply Reply Quote 0
              • S
                Sophia Cruz @Alan Kilborn
                last edited by May 17, 2019, 5:22 PM

                @Alan-Kilborn thank you for this link but I already tried the answers provided but I was only able to convert am up to minutes using . as a separator.

                A 2 Replies Last reply May 17, 2019, 5:24 PM Reply Quote 0
                • A
                  Alan Kilborn @Sophia Cruz
                  last edited by May 17, 2019, 5:24 PM

                  @Sophia-Cruz

                  It wasn’t for you, it was for future searchers of this site that may find this topic when what they are really looking for is the other way around. :)

                  BTW if Eko doesn’t solve your problem here in a reasonable amount of time, I’ll jump in. :)

                  E 1 Reply Last reply May 17, 2019, 5:36 PM Reply Quote 4
                  • E
                    Ekopalypse @Alan Kilborn
                    last edited by May 17, 2019, 5:36 PM

                    @Alan-Kilborn

                    Alan, LOL, please feel free to do so - you are much more in this regex then I’m.

                    1 Reply Last reply Reply Quote 1
                    • A
                      Alan Kilborn @Sophia Cruz
                      last edited by May 17, 2019, 6:01 PM

                      @Sophia-Cruz

                      This seems to do it:

                      Find: ^(?:(01)|(02)|(03)|(04)|(05)|(06)|(07)|(08)|(09)|(10)|(11)|(12))\.(\d\d)\.(\d\d)\.(\d{3}) (?:(A)|(P))M
                      Repl: (?{12}?{16}00:12)(?{1}?{17}13:01)(?{2}?{17}14:02)(?{3}?{17}15:03)(?{4}?{17}16:04)(?{5}?{17}17:05)(?{6}?{17}18:06)(?{7}?{17}19:07)(?{8}?{17}20:08)(?{9}?{17}21:09)(?{10}?{17}22:10)(?{11}?{17}23:11):$13:$14:$15
                      Search mode: Regular expression

                      I tried to be “fancy” and do the “AM” and “PM” part with “named groups” so that the replacement is more “readable”, but I ran into some trouble with that. If I get it working, and it truly is more readable, I may post that as well…

                      A S 2 Replies Last reply May 17, 2019, 6:21 PM Reply Quote 5
                      • A
                        Alan Kilborn @Alan Kilborn
                        last edited by Alan Kilborn May 17, 2019, 6:22 PM May 17, 2019, 6:21 PM

                        I got it to work with named groups. The problem was, and it makes it less elegant, is that mixing numbered and named capture groups seems to mess things up. So I had to artificially name group # 1 as “one” instead of just using its number. I’ll let the reader decide if this version is more readable than the previous:

                        Find: ^(?:(?<one>01)|(?<two>02)|(?<three>03)|(?<four>04)|(?<five>05)|(?<six>06)|(?<seven>07)|(?<eight>08)|(?<nine>09)|(?<ten>10)|(?<eleven>11)|(?<twelve>12))\.(?<mins>\d\d)\.(?<secs>\d\d)\.(?<ms>\d{3}) (?:(?<am>A)|(?<pm>P))M

                        Repl: (?{twelve}?{am}00:12)(?{one}?{pm}13:01)(?{two}?{pm}14:02)(?{three}?{pm}15:03)(?{four}?{pm}16:04)(?{five}?{pm}17:05)(?{six}?{pm}18:06)(?{seven}?{pm}19:07)(?{eight}?{pm}20:08)(?{nine}?{pm}21:09)(?{ten}?{pm}22:10)(?{eleven}?{pm}23:11):$+{mins}:$+{secs}:$+{ms}

                        Search mode: Regular expression

                        (And I fully expect a “holy cow batman!” from @Meta-Chuh on that one!)

                        (And yes, doing 12 differently from the others in the replace was intentional, as it is a little “out of place” in the conversion)

                        E M 2 Replies Last reply May 17, 2019, 6:35 PM Reply Quote 5
                        • E
                          Ekopalypse @Alan Kilborn
                          last edited by May 17, 2019, 6:35 PM

                          @Alan-Kilborn

                          LOL - if I could I would upvote it 12 times. :-D

                          A 1 Reply Last reply May 17, 2019, 6:37 PM Reply Quote 2
                          • A
                            Alan Kilborn @Ekopalypse
                            last edited by Alan Kilborn May 17, 2019, 6:38 PM May 17, 2019, 6:37 PM

                            @Ekopalypse

                            Sometimes things get upvoted too quickly for people to have tried it out to verify/duplicate results. This is somewhat bad as if something doesn’t work (and the thread dies right there) it looks to future readers like a good solution…

                            BTW I think the “replace” is very readable with the named groups, but the “find” suffers…slightly…

                            E 1 Reply Last reply May 17, 2019, 6:40 PM Reply Quote 1
                            • E
                              Ekopalypse @Alan Kilborn
                              last edited by May 17, 2019, 6:40 PM

                              @Alan-Kilborn

                              :-D for me this looks like what we call - bohemian villages.
                              But I can participate on that thread now - I’ve tested it, and it looks good to me :-)
                              Let’s see what the OP thinks about it.

                              1 Reply Last reply Reply Quote 2
                              • S
                                Sophia Cruz @Alan Kilborn
                                last edited by May 17, 2019, 6:40 PM

                                @Alan-Kilborn it works perfectly. Thank you so much!

                                1 Reply Last reply Reply Quote 3
                                • S
                                  Sophia Cruz
                                  last edited by May 17, 2019, 6:42 PM

                                  2nd solution is less confusing but both still produces the desired output. :D

                                  1 Reply Last reply Reply Quote 1
                                  • M
                                    Meta Chuh moderator @Alan Kilborn
                                    last edited by May 17, 2019, 7:02 PM

                                    @Alan-Kilborn

                                    holy cow batman! 😄👍

                                    Sometimes things get upvoted too quickly for people to have tried it out to verify/duplicate results.

                                    i guess sometimes your writing style is so worth an upvote, that people give you one, even if they have tested it’s content to fail.

                                    greetings,
                                    robin

                                    A 1 Reply Last reply May 17, 2019, 8:33 PM Reply Quote 1
                                    • A
                                      Alan Kilborn @Meta Chuh
                                      last edited by Alan Kilborn May 17, 2019, 8:33 PM May 17, 2019, 8:33 PM

                                      @Meta-Chuh said:

                                      your writing style…worth an upvote…

                                      My writing style? Nah. I don’t have the flowery prose of a @PeterJones or the diplomatic panache of a @Meta-Chuh . [Basically I don’t wanna put that kind of effort in–to the typing part–obviously with the above regexes staring us in the face I’ll put a little time/effort into THAT aspect. Trying to provide some hopefully accurate help, maybe without the greatest english composition accompanying.]

                                      1 Reply Last reply Reply Quote 2
                                      • guy038G
                                        guy038
                                        last edited by guy038 Nov 19, 2022, 6:27 PM May 18, 2019, 12:15 AM

                                        Hi, @sophia-cruz, @alan-kilborn, @eko-palypse, @meta-chuh and All,

                                        Here is a variant of the Alan’s solution, which is less restrictive :

                                        • It just needs that the hour should be located after a non-word, instead of the beginning of line, due to the \b syntax

                                        • It does not care of the synbol between the different parts of the hour ( just changing the \. syntax by . ! )

                                        • It allows the milliseconds part to be absent ( .MMM ), in the hour, with the (?:.(\d{3}))? syntax

                                        • It allows the AM or PM part to come next to the digits, with \x20?

                                        • It does not care of the case , allowing the four syntaxes am, pm, AM and PM with the regex (?i:(AM)|PM)

                                        Note :
                                        In the remplacement regex, when group 17 exists ( AM ), I just rewrite the hour part ( \1 ), except when hour = 12, where the logic is reversed !


                                        So, assuming this sample text :

                                        12.00.47 AM
                                        	12.58.18.387 am
                                        01 07 28 421 AM
                                        03:17:31:934am
                                        05.43.26.582 AM
                                                07:23:03.732 am
                                        09.31.08AM
                                        11.57.59,003 am
                                        ~~~~~~~~~~~~~~~~~~~~
                                        12.00.45 PM
                                        	12.56.49.203 pm
                                        01 04 51 387 PM
                                        03:15:33:632pm
                                        05.22.00.814 PM
                                                07:33:55.548 pm
                                        09.45.26PM
                                        11.59.11,247 pm
                                        

                                        With the regex S/R below :

                                        SEARCH :    \b(0(?:(1)|(2)|(3)|(4)|(5)|(6)|(7)|(8)|(9))|(10)|(11)|(12)).(\d\d).(\d\d)(?:.(\d{3}))?\x20?(?i:(AM)|PM)
                                                      │    │   │   │   │   │   │   │   │   │    │    │    │     │      │         │                │
                                                      1    2   3   4    5   6   7   8   9   10   11   12    13    14     15        16               17   <-- Groups
                                        
                                        REPLACE :   (?2(?17\1:13))(?3(?17\1:14))(?4(?17\1:15))(?5(?17\1:16))(?6(?17\1:17))(?7(?17\1:18))(?8(?17\1:19))(?9(?17\1:20))(?10(?17\1:21))(?11(?17\1:22))(?12(?17\1:23))(?13(?{17}00:\1)):$14:$15(?16\:$16)
                                        

                                        We would obtain :

                                        00:00:47
                                        	00:58:18:387
                                        01:07:28:421
                                        03:17:31:934
                                        05:43:26:582
                                                07:23:03:732
                                        09:31:08
                                        11:57:59:003
                                        ~~~~~~~~~~~~~~~~~~~~
                                        12:00:45
                                        	12:56:49:203
                                        13:04:51:387
                                        15:15:33:632
                                        17:22:00:814
                                                19:33:55:548
                                        21:45:26
                                        23:59:11:247
                                        

                                        Best Regards,

                                        guy038

                                        1 Reply Last reply Reply Quote 3
                                        • guy038G
                                          guy038
                                          last edited by guy038 May 19, 2019, 8:14 AM May 19, 2019, 7:08 AM

                                          Hi, All,

                                          When I woke up this morning, I immediately saw a simplification ( in length ! ) of the replacement regex ;-))

                                          So, my last version is :

                                          SEARCH \b(0(?:(1)|(2)|(3)|(4)|(5)|(6)|(7)|(8)|(9))|(10)|(11)|(12)).(\d\d).(\d\d)(?:.(\d{3}))?\x20?(?i:(AM)|PM)

                                          REPLACE (?13(?{17}00:\1):(?17\1:(?{2}13)(?{3}14)(?{4}15)(?{5}16)(?{6}17)(?{7}18)(?{8}19)(?{9}20)(?{10}21)(?{11}22)(?{12}23))):$14:$15(?16\:$16)

                                          BR

                                          guy038

                                          1 Reply Last reply Reply Quote 3
                                          2 out of 21
                                          • First post
                                            2/21
                                            Last post
                                          The Community of users of the Notepad++ text editor.
                                          Powered by NodeBB | Contributors