Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C#
  4. Military (Midnight) DateTime subtraction

Military (Midnight) DateTime subtraction

Scheduled Pinned Locked Moved C#
helpquestiondatabase
14 Posts 7 Posters 0 Views 1 Watching
  • 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.
  • J Offline
    J Offline
    Jacob D Dixon
    wrote on last edited by
    #1

    How would I fix this problem I am having? I am reading datetime values from a database.

    DateTime timeIn = DateTime.Parse(myReader["TimeIn"].ToString());
    DateTime timeOut = DateTime.Parse(myReader["TimeOut"].ToString());

    TimeSpan timeHere = timeOut.Subtract(timeIn);

    Now this code works perfectly except for dealing with midnight. If the person is here at 1:30PM and leaves at lets say 12:04AM, then how do I calulate that? It returns an hour of -13? The time is entered at 00:04 when put in the datebase (It doesn't let you enter 24:04)

    A P P 3 Replies Last reply
    0
    • J Jacob D Dixon

      How would I fix this problem I am having? I am reading datetime values from a database.

      DateTime timeIn = DateTime.Parse(myReader["TimeIn"].ToString());
      DateTime timeOut = DateTime.Parse(myReader["TimeOut"].ToString());

      TimeSpan timeHere = timeOut.Subtract(timeIn);

      Now this code works perfectly except for dealing with midnight. If the person is here at 1:30PM and leaves at lets say 12:04AM, then how do I calulate that? It returns an hour of -13? The time is entered at 00:04 when put in the datebase (It doesn't let you enter 24:04)

      A Offline
      A Offline
      akidan
      wrote on last edited by
      #2

      Is there an actual date associated with the value, or is it strictly time only? If it is time only, this explains why you're getting a negative value... A simple workaround may be to simply add 24 hours to your result if timeHere is negative, as you can hopefully assume nobody's time traveling and clocking out before they clock in. :)

      J 2 Replies Last reply
      0
      • A akidan

        Is there an actual date associated with the value, or is it strictly time only? If it is time only, this explains why you're getting a negative value... A simple workaround may be to simply add 24 hours to your result if timeHere is negative, as you can hopefully assume nobody's time traveling and clocking out before they clock in. :)

        J Offline
        J Offline
        Jacob D Dixon
        wrote on last edited by
        #3

        LOL. It is just time only. So if timeOut.Hour == 0 then I use it to add 24 hours to it then do the subtraction right

        A 1 Reply Last reply
        0
        • J Jacob D Dixon

          How would I fix this problem I am having? I am reading datetime values from a database.

          DateTime timeIn = DateTime.Parse(myReader["TimeIn"].ToString());
          DateTime timeOut = DateTime.Parse(myReader["TimeOut"].ToString());

          TimeSpan timeHere = timeOut.Subtract(timeIn);

          Now this code works perfectly except for dealing with midnight. If the person is here at 1:30PM and leaves at lets say 12:04AM, then how do I calulate that? It returns an hour of -13? The time is entered at 00:04 when put in the datebase (It doesn't let you enter 24:04)

          P Offline
          P Offline
          paas
          wrote on last edited by
          #4

          In military time, 00:04 is 12:04AM. There is no such thing as 24:04 in military time; military time starts at 0000 (midnight). If you are subtracting 1:30PM from 12:04AM for the same date, you should get a timespan result of -13:26.

          J 1 Reply Last reply
          0
          • J Jacob D Dixon

            LOL. It is just time only. So if timeOut.Hour == 0 then I use it to add 24 hours to it then do the subtraction right

            A Offline
            A Offline
            akidan
            wrote on last edited by
            #5

            Well, except then you'll get someone poor sod who works until 1am who blows that assumption up. :) I think you can do something like

            if (timeHere < TimeSpan.Zero)
            timeHere += TimeSpan.FromDays(1);

            I think this should work, as long as nobody is working longer than 24 hours shifts. ;) I don't have a compiler in front of me, so you may want to try a few values in that and make sure it works as expected, though. :)

            1 Reply Last reply
            0
            • A akidan

              Is there an actual date associated with the value, or is it strictly time only? If it is time only, this explains why you're getting a negative value... A simple workaround may be to simply add 24 hours to your result if timeHere is negative, as you can hopefully assume nobody's time traveling and clocking out before they clock in. :)

              J Offline
              J Offline
              Jacob D Dixon
              wrote on last edited by
              #6

              Ok I did timeOut = timeOut.AddHours(24); then completed it.. It works, thanks!

              A D 2 Replies Last reply
              0
              • J Jacob D Dixon

                Ok I did timeOut = timeOut.AddHours(24); then completed it.. It works, thanks!

                A Offline
                A Offline
                akidan
                wrote on last edited by
                #7

                Happy to be of assistance. :)

                1 Reply Last reply
                0
                • P paas

                  In military time, 00:04 is 12:04AM. There is no such thing as 24:04 in military time; military time starts at 0000 (midnight). If you are subtracting 1:30PM from 12:04AM for the same date, you should get a timespan result of -13:26.

                  J Offline
                  J Offline
                  Jacob D Dixon
                  wrote on last edited by
                  #8

                  Thanks, I knew there wasnt a 24 but it doesnt work if you subtract 00 from any other number to get the correct time.. So I added 24 to the time that held the midnight number to subtract the other time.

                  1 Reply Last reply
                  0
                  • J Jacob D Dixon

                    How would I fix this problem I am having? I am reading datetime values from a database.

                    DateTime timeIn = DateTime.Parse(myReader["TimeIn"].ToString());
                    DateTime timeOut = DateTime.Parse(myReader["TimeOut"].ToString());

                    TimeSpan timeHere = timeOut.Subtract(timeIn);

                    Now this code works perfectly except for dealing with midnight. If the person is here at 1:30PM and leaves at lets say 12:04AM, then how do I calulate that? It returns an hour of -13? The time is entered at 00:04 when put in the datebase (It doesn't let you enter 24:04)

                    P Offline
                    P Offline
                    PIEBALDconsult
                    wrote on last edited by
                    #9

                    That would be why you should store the full date and time.

                    L 1 Reply Last reply
                    0
                    • P PIEBALDconsult

                      That would be why you should store the full date and time.

                      L Offline
                      L Offline
                      Luc Pattyn
                      wrote on last edited by
                      #10

                      A true evangelist would add "according to ISO 8601" :laugh:

                      Luc Pattyn [Forum Guidelines] [My Articles]


                      - before you ask a question here, search CodeProject, then Google - the quality and detail of your question reflects on the effectiveness of the help you are likely to get - use the code block button (PRE tags) to preserve formatting when showing multi-line code snippets


                      modified on Friday, June 10, 2011 11:32 PM

                      G P 2 Replies Last reply
                      0
                      • L Luc Pattyn

                        A true evangelist would add "according to ISO 8601" :laugh:

                        Luc Pattyn [Forum Guidelines] [My Articles]


                        - before you ask a question here, search CodeProject, then Google - the quality and detail of your question reflects on the effectiveness of the help you are likely to get - use the code block button (PRE tags) to preserve formatting when showing multi-line code snippets


                        modified on Friday, June 10, 2011 11:32 PM

                        G Offline
                        G Offline
                        Guffa
                        wrote on last edited by
                        #11

                        Well, not in this case, as if you would store a complete date and time you should store it as a datetime value, not a string... :)

                        Despite everything, the person most likely to be fooling you next is yourself.

                        L 1 Reply Last reply
                        0
                        • G Guffa

                          Well, not in this case, as if you would store a complete date and time you should store it as a datetime value, not a string... :)

                          Despite everything, the person most likely to be fooling you next is yourself.

                          L Offline
                          L Offline
                          Luc Pattyn
                          wrote on last edited by
                          #12

                          True evangelists don't care about circumstances, they spread the gospel no matter what. ;P

                          Luc Pattyn [Forum Guidelines] [My Articles]


                          - before you ask a question here, search CodeProject, then Google - the quality and detail of your question reflects on the effectiveness of the help you are likely to get - use the code block button (PRE tags) to preserve formatting when showing multi-line code snippets


                          modified on Friday, June 10, 2011 11:32 PM

                          1 Reply Last reply
                          0
                          • L Luc Pattyn

                            A true evangelist would add "according to ISO 8601" :laugh:

                            Luc Pattyn [Forum Guidelines] [My Articles]


                            - before you ask a question here, search CodeProject, then Google - the quality and detail of your question reflects on the effectiveness of the help you are likely to get - use the code block button (PRE tags) to preserve formatting when showing multi-line code snippets


                            modified on Friday, June 10, 2011 11:32 PM

                            P Offline
                            P Offline
                            PIEBALDconsult
                            wrote on last edited by
                            #13

                            Alas, no one listens. :sigh: And at least he was already using 24-hour time, so I didn't feel I had to invoke the gospel according to ISO 8601.

                            1 Reply Last reply
                            0
                            • J Jacob D Dixon

                              Ok I did timeOut = timeOut.AddHours(24); then completed it.. It works, thanks!

                              D Offline
                              D Offline
                              darkelv
                              wrote on last edited by
                              #14

                              Well, until there's one guy who stayed for longer than 1 day there... ;)

                              1 Reply Last reply
                              0
                              Reply
                              • Reply as topic
                              Log in to reply
                              • Oldest to Newest
                              • Newest to Oldest
                              • Most Votes


                              • Login

                              • Don't have an account? Register

                              • Login or register to search.
                              • First post
                                Last post
                              0
                              • Categories
                              • Recent
                              • Tags
                              • Popular
                              • World
                              • Users
                              • Groups