Calculate the number of days passed from a given year











up vote
1
down vote

favorite












I have this code for calculating the number of days passed from a given year:



for (int currentYear = localDate.getYear() - 1; currentYear >= STARTING_YEAR; currentYear--){
LocalDate date = LocalDate.of(currentYear,5,5); //an arbitrary day of year
jdn += date.lengthOfYear();
}
jdn += localDate.getDayOfYear();


This code is working as expected.



I am not comfortable with choosing an arbitrary day to only get the length of the year. Is there any better approach?










share|improve this question









New contributor




Noussa is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
























    up vote
    1
    down vote

    favorite












    I have this code for calculating the number of days passed from a given year:



    for (int currentYear = localDate.getYear() - 1; currentYear >= STARTING_YEAR; currentYear--){
    LocalDate date = LocalDate.of(currentYear,5,5); //an arbitrary day of year
    jdn += date.lengthOfYear();
    }
    jdn += localDate.getDayOfYear();


    This code is working as expected.



    I am not comfortable with choosing an arbitrary day to only get the length of the year. Is there any better approach?










    share|improve this question









    New contributor




    Noussa is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
    Check out our Code of Conduct.






















      up vote
      1
      down vote

      favorite









      up vote
      1
      down vote

      favorite











      I have this code for calculating the number of days passed from a given year:



      for (int currentYear = localDate.getYear() - 1; currentYear >= STARTING_YEAR; currentYear--){
      LocalDate date = LocalDate.of(currentYear,5,5); //an arbitrary day of year
      jdn += date.lengthOfYear();
      }
      jdn += localDate.getDayOfYear();


      This code is working as expected.



      I am not comfortable with choosing an arbitrary day to only get the length of the year. Is there any better approach?










      share|improve this question









      New contributor




      Noussa is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.











      I have this code for calculating the number of days passed from a given year:



      for (int currentYear = localDate.getYear() - 1; currentYear >= STARTING_YEAR; currentYear--){
      LocalDate date = LocalDate.of(currentYear,5,5); //an arbitrary day of year
      jdn += date.lengthOfYear();
      }
      jdn += localDate.getDayOfYear();


      This code is working as expected.



      I am not comfortable with choosing an arbitrary day to only get the length of the year. Is there any better approach?







      java datetime






      share|improve this question









      New contributor




      Noussa is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.











      share|improve this question









      New contributor




      Noussa is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      share|improve this question




      share|improve this question








      edited yesterday









      200_success

      127k15149412




      127k15149412






      New contributor




      Noussa is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      asked yesterday









      Noussa

      83




      83




      New contributor




      Noussa is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.





      New contributor





      Noussa is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






      Noussa is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






















          1 Answer
          1






          active

          oldest

          votes

















          up vote
          1
          down vote



          accepted










          Your code scales poorly if there are many years between STARTING_YEAR and localDate.



          Worse, if localDate occurs before the STARTING_YEAR, then your code behaves as if STARTING_YEAR is the same year as localDate, which is weird behavior.



          To calculate the number of days between two dates, use DAYS.between().



          import java.time.LocalDate;
          import static java.time.temporal.ChronoUnit.DAYS;


          long jdn = 1 + DAYS.between(LocalDate.ofYearDay(STARTING_YEAR, 1), localDate);


          The 1 + is necessary because the convention when subtracting dates is inclusive-exclusive, whereas your code uses an inclusive-inclusive range.






          share|improve this answer





















            Your Answer





            StackExchange.ifUsing("editor", function () {
            return StackExchange.using("mathjaxEditing", function () {
            StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
            StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
            });
            });
            }, "mathjax-editing");

            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "196"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            convertImagesToLinks: false,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: null,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });






            Noussa is a new contributor. Be nice, and check out our Code of Conduct.










            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f209043%2fcalculate-the-number-of-days-passed-from-a-given-year%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes








            up vote
            1
            down vote



            accepted










            Your code scales poorly if there are many years between STARTING_YEAR and localDate.



            Worse, if localDate occurs before the STARTING_YEAR, then your code behaves as if STARTING_YEAR is the same year as localDate, which is weird behavior.



            To calculate the number of days between two dates, use DAYS.between().



            import java.time.LocalDate;
            import static java.time.temporal.ChronoUnit.DAYS;


            long jdn = 1 + DAYS.between(LocalDate.ofYearDay(STARTING_YEAR, 1), localDate);


            The 1 + is necessary because the convention when subtracting dates is inclusive-exclusive, whereas your code uses an inclusive-inclusive range.






            share|improve this answer

























              up vote
              1
              down vote



              accepted










              Your code scales poorly if there are many years between STARTING_YEAR and localDate.



              Worse, if localDate occurs before the STARTING_YEAR, then your code behaves as if STARTING_YEAR is the same year as localDate, which is weird behavior.



              To calculate the number of days between two dates, use DAYS.between().



              import java.time.LocalDate;
              import static java.time.temporal.ChronoUnit.DAYS;


              long jdn = 1 + DAYS.between(LocalDate.ofYearDay(STARTING_YEAR, 1), localDate);


              The 1 + is necessary because the convention when subtracting dates is inclusive-exclusive, whereas your code uses an inclusive-inclusive range.






              share|improve this answer























                up vote
                1
                down vote



                accepted







                up vote
                1
                down vote



                accepted






                Your code scales poorly if there are many years between STARTING_YEAR and localDate.



                Worse, if localDate occurs before the STARTING_YEAR, then your code behaves as if STARTING_YEAR is the same year as localDate, which is weird behavior.



                To calculate the number of days between two dates, use DAYS.between().



                import java.time.LocalDate;
                import static java.time.temporal.ChronoUnit.DAYS;


                long jdn = 1 + DAYS.between(LocalDate.ofYearDay(STARTING_YEAR, 1), localDate);


                The 1 + is necessary because the convention when subtracting dates is inclusive-exclusive, whereas your code uses an inclusive-inclusive range.






                share|improve this answer












                Your code scales poorly if there are many years between STARTING_YEAR and localDate.



                Worse, if localDate occurs before the STARTING_YEAR, then your code behaves as if STARTING_YEAR is the same year as localDate, which is weird behavior.



                To calculate the number of days between two dates, use DAYS.between().



                import java.time.LocalDate;
                import static java.time.temporal.ChronoUnit.DAYS;


                long jdn = 1 + DAYS.between(LocalDate.ofYearDay(STARTING_YEAR, 1), localDate);


                The 1 + is necessary because the convention when subtracting dates is inclusive-exclusive, whereas your code uses an inclusive-inclusive range.







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered yesterday









                200_success

                127k15149412




                127k15149412






















                    Noussa is a new contributor. Be nice, and check out our Code of Conduct.










                    draft saved

                    draft discarded


















                    Noussa is a new contributor. Be nice, and check out our Code of Conduct.













                    Noussa is a new contributor. Be nice, and check out our Code of Conduct.












                    Noussa is a new contributor. Be nice, and check out our Code of Conduct.
















                    Thanks for contributing an answer to Code Review Stack Exchange!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    Use MathJax to format equations. MathJax reference.


                    To learn more, see our tips on writing great answers.





                    Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                    Please pay close attention to the following guidance:


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f209043%2fcalculate-the-number-of-days-passed-from-a-given-year%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Quarter-circle Tiles

                    build a pushdown automaton that recognizes the reverse language of a given pushdown automaton?

                    Mont Emei