• Login
Community
  • Login

How to change/convert the format of a timestamp?

Scheduled Pinned Locked Moved General Discussion
38 Posts 6 Posters 12.3k 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.
  • E
    Eko palypse @Alan Kilborn
    last edited by Jan 25, 2019, 9:38 PM

    @Alan-Kilborn

    actually I’m trying to avoid function lookups as those are expensive, especially when it involves
    Python->C->Python conversion. But I must admit, in this case I don’t think that I gain any performance improvement, it might be even slower. Let’s test it. Will come back.

    A 1 Reply Last reply Jan 25, 2019, 9:41 PM Reply Quote 1
    • A
      Alan Kilborn @Eko palypse
      last edited by Jan 25, 2019, 9:41 PM

      @Eko-palypse

      Okay…so I didn’t follow any of that, but I look forward to the come back. :)

      E 1 Reply Last reply Jan 25, 2019, 9:45 PM Reply Quote 0
      • E
        Eko palypse @Alan Kilborn
        last edited by Jan 25, 2019, 9:45 PM

        @Alan-Kilborn

        so it is still a little bit faster - to be honest, haven’t expected it.

        looped 1000 times over the same text
        16.7720000744 <-- return m.group(0)
        16.6819999218 <- return ‘{}:{}’.format(*parts[:])

        1 Reply Last reply Reply Quote 1
        • P
          PeterJones
          last edited by Jan 25, 2019, 9:45 PM

          My two comments would be:

          1. if min > 60: = if the data is 60:00.000, it wouldn’t change. Make it if min >=60:
          2. If the OP (or someone else) has mixed data, or had partially changed them, and came back later and tried the same script, weird stuff will happen. I’d recommend: editor.rereplace('(?<![:\d])\d+:\d+\.\d+',change_format), which adds a negative lookbehind to not match if there’s a colon or another digit before the \d+
          E 1 Reply Last reply Jan 25, 2019, 9:48 PM Reply Quote 1
          • E
            Eko palypse @PeterJones
            last edited by Jan 25, 2019, 9:48 PM

            @PeterJones

            YES - this is a bug it should > 59 - omg.
            About mixed data you are right but this is always the question what if it looked like
            hh.mm.ss.msec …

            M 1 Reply Last reply Jan 25, 2019, 9:56 PM Reply Quote 1
            • P
              PeterJones
              last edited by Jan 25, 2019, 9:54 PM

              @Eko-palypse ,

              Indeed, there are always more formats that might exist. I’ve only seen colon-separated in .srt files, so I think that keeping it generic enough that it won’t mess up an existing .srt, even if it does have some with hours and some without.

              BTW: I had forgotten why I included the [:\d] rather than just : in my negative lookbehind: without the \d in the character class, 1:15:00.000 (which shouldn’t match) would partially match on 5:00.000, which would be even worse.

              And running a test with 1:15:00.000, even with your simpler expression, works correctly (ie, doesn’t try to change it) – ahh, that’s because the minutes are less than 60. I guess unless there’s a strange 1:65:00.000, yours won’t be a problem. I guess yours is generic enough.

              1 Reply Last reply Reply Quote 2
              • M
                Meta Chuh moderator @Eko palypse
                last edited by Jan 25, 2019, 9:56 PM

                @Eko-palypse

                I’m trying to avoid function lookups as those are expensive …

                yes, i’m a bit short on money too at the moment … and don’t even dare to give me an (s.h) for this comment 😉

                E 1 Reply Last reply Jan 25, 2019, 10:04 PM Reply Quote 1
                • E
                  Eko palypse @Meta Chuh
                  last edited by Jan 25, 2019, 10:04 PM

                  @Meta-Chuh

                  :-D - always reminds me of this

                  M 1 Reply Last reply Jan 25, 2019, 10:07 PM Reply Quote 1
                  • M
                    Meta Chuh moderator @Eko palypse
                    last edited by Jan 25, 2019, 10:07 PM

                    @Eko-palypse

                    singing: ahaaaa, ahahahaaa … all the things i could do … ;-)

                    E 1 Reply Last reply Jan 25, 2019, 10:13 PM Reply Quote 1
                    • E
                      Eko palypse @Meta Chuh
                      last edited by Jan 25, 2019, 10:13 PM

                      @Meta-Chuh

                      I don’t understand all of this but what I got makes me laughing … :-D

                      M 1 Reply Last reply Jan 25, 2019, 10:27 PM Reply Quote 1
                      • M
                        Meta Chuh moderator @Eko palypse
                        last edited by Jan 25, 2019, 10:27 PM

                        @Eko-palypse
                        i also didn’t understand many of weird al yankovic’s insider jokes, but he made a lot of 80’s songs parodies, a funny one was “fat”, a parody of michael jacksons “bad” … or at least it used to be funny to me when i was a kid ;-)

                        1 Reply Last reply Reply Quote 1
                        • M
                          Meta Chuh moderator @Dana Wright
                          last edited by Jan 25, 2019, 10:41 PM

                          btw: my apologies to you @Dana-Wright if you had to read everything after your “Worked like a charm! Thank you very much!” and eko’s explanation.

                          sometimes (but very few) we tend to have a little “after work chat” between regulars in public, which can be a bit off topic from time to time. i hope you didn’t mind.

                          1 Reply Last reply Reply Quote 1
                          • M
                            Meta Chuh moderator
                            last edited by Meta Chuh Jan 26, 2019, 12:50 AM Jan 25, 2019, 11:24 PM

                            one more song and then it’s enough for today:

                            >>> here’s a song <<< for @Scott-Sumner 😪😉😂

                            A 1 Reply Last reply Jan 26, 2019, 2:24 PM Reply Quote 1
                            • A
                              Alan Kilborn @Meta Chuh
                              last edited by Jan 26, 2019, 2:24 PM

                              @Meta-Chuh

                              As valuable as Scott’s (and Claudia’s) posts were, we have some really good new posters about scripting (example Eko, and Peter is developing as a Python person), so let’s not be too sad if they decide not to return.

                              1 Reply Last reply Reply Quote 0
                              • G
                                guy038
                                last edited by guy038 Jan 27, 2019, 10:12 PM Jan 27, 2019, 8:26 PM

                                Hello, @dana-wright, @eko-palypse, @alan-kilborn, @meta-chuh, @peterjones and All,

                                Just a bit late, but here are two regexes S/R which could achieve the goal !

                                Note that, regarding the initial timestamps, I will use the convention [M]MM:SS.mmm, where :

                                • [M]MM represents the number of minutes, from 00 to 119/179, with two or three digits

                                • SS represents the number of seconds, from 00 to 59, with two digits

                                • mmm represents the number of milliseconds, from 000 to 999, with three digits


                                Case A) If your file contains timestamps syntaxes, from 00:00.000 to 119:59.999, only ( so 0 <[M]MM < 2 hours ) , one solution could be :

                                • SEARCH A   (?<!:)(?:([0-5])|(6)|(7)|(8)|(9)|(10)|(11))(\d:\d{2}\.\d{3})(?=\s)

                                • REPLACE A (?{1}00:01):(?1\1)(?{2}0)(?{3}1)(?{4}2)(?{5}3)(?{6}4)(?{7}5)\8

                                Case B) If your file contains timestamps syntaxes, from 00:00.000 to 179:59.999, only ( so 0 < [M]MM < 3 hours ), a longer S/R is :

                                • SEARCH B   (?<!:)(?:([0-5])|((6)|(7)|(8)|(9)|(10)|(11))|((12)|(13)|(14)|(15)|(16)|(17)))(\d:\d{2}\.\d{3})(?=\s)

                                • REPLACE B (?{1}00)(?{2}01)(?{9}02):(?1\1)(?{3}0)(?{4}1)(?{5}2)(?{6}3)(?{7}4)(?{8}5)(?{10}0)(?{11}1)(?{12}2)(?{13}3)(?{14}4)(?{15}5)$16


                                As usual :

                                • Check the Wrap around option

                                • Select the Regular expression search mode

                                • Click on the Replace All button

                                Best Regards

                                guy038

                                P. S.

                                For instance :

                                • With the regexes A, the initial text, below :
                                00:00.000
                                23:52.984
                                39:43.529
                                59:59.999
                                60:00.000
                                78:08.168
                                91:38.524
                                103:05.216
                                111:41.465
                                119:59.999
                                

                                becomes :

                                00:00:00.000
                                00:23:52.984
                                00:39:43.529
                                00:59:59.999
                                01:00:00.000
                                01:18:08.168
                                01:31:38.524
                                01:43:05.216
                                01:51:41.465
                                01:59:59.999
                                
                                • With the regexes B, the following text :
                                00:00.000
                                23:52.984
                                39:43.529
                                59:59.999
                                60:00.000
                                78:08.168
                                91:38.524
                                103:05.216
                                111:41.465
                                119:59.999
                                120:00.000
                                147:33.150
                                160:00.058
                                179:59.999
                                

                                becomes :

                                00:00:00.000
                                00:23:52.984
                                00:39:43.529
                                00:59:59.999
                                01:00:00.000
                                01:18:08.168
                                01:31:38.524
                                01:43:05.216
                                01:51:41.465
                                01:59:59.999
                                02:00:00.000
                                02:27:33.150
                                02:40:00.058
                                02:59:59.999
                                
                                M 1 Reply Last reply Jan 27, 2019, 8:40 PM Reply Quote 2
                                • M
                                  Meta Chuh moderator @guy038
                                  last edited by Jan 27, 2019, 8:40 PM

                                  @guy038
                                  it’s never too late, if people care … and thankfully many do 😃
                                  thumbs up 👍

                                  1 Reply Last reply Reply Quote 1
                                  • P
                                    PeterJones
                                    last edited by Jan 28, 2019, 1:06 AM

                                    Thank you, @guy038. I had been trying the notation similar to (?(1)00:01) in the replace, rather than (?{1}00:01), which is why I wasn’t able to get the conditional to work right.

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