<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body>
    Hi,<br>
    <br>
    The seconds and nano-seconds are computed separately.  <br>
    The representation of Instant holds seconds and nanoseconds
    separately.<br>
    <br>
    The computation is performed on the nano-seconds of the Instant and
    truncated to milliseconds.<br>
    The value of 0.000999 becomes 0 when truncated to MILLIS.<br>
    <br>
    Regards, Roger<br>
    <br>
    <div class="moz-cite-prefix">On 5/3/23 12:54 PM, SHARPE, Stuart
      (Commercial & Institutional CDIO) wrote:<br>
    </div>
    <blockquote type="cite" cite="mid:LO2P265MB337698E3B54595B9627229B28A6C9@LO2P265MB3376.GBRP265.PROD.OUTLOOK.COM">
      
      <meta name="Generator" content="Microsoft Word 15 (filtered
        medium)">
      <style>@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        font-size:10.0pt;
        font-family:"Arial",sans-serif;
        mso-fareast-language:EN-US;}p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {mso-style-priority:99;
        mso-style-link:"Plain Text Char";
        margin:0cm;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}span.EmailStyle23
        {mso-style-type:personal-compose;
        font-family:"Arial",sans-serif;
        color:windowtext;}span.PlainTextChar
        {mso-style-name:"Plain Text Char";
        mso-style-priority:99;
        mso-style-link:"Plain Text";
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-GB;}.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Arial",sans-serif;
        mso-fareast-language:EN-US;}div.WordSection1
        {page:WordSection1;}</style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
      <div class="WordSection1">
        <p class="MsoPlainText">Hello,<o:p></o:p></p>
        <p class="MsoPlainText"><o:p> </o:p></p>
        <p class="MsoPlainText">I believe I have discovered a bug in
          java.time. I've searched Jira and couldn't find any existing
          similar issue.
          <o:p></o:p></p>
        <p class="MsoPlainText"><o:p> </o:p></p>
        <p class="MsoPlainText">Consider the following code:<o:p></o:p></p>
        <p class="MsoPlainText"><o:p> </o:p></p>
        <p class="MsoPlainText">    var t1 =
          Instant.parse("2023-05-03T10:00:00.000999Z");<o:p></o:p></p>
        <p class="MsoPlainText">    var t2 =
          Instant.parse("2023-05-03T10:00:01.000Z");<o:p></o:p></p>
        <p class="MsoPlainText">    var t3 =
          Instant.parse("2023-05-03T10:00:01.001Z");<o:p></o:p></p>
        <p class="MsoPlainText">    <o:p></o:p></p>
        <p class="MsoPlainText">    System.out.println(MILLIS.between(t1,
          t2));<o:p></o:p></p>
        <p class="MsoPlainText">   
          System.out.println(MILLIS.between(t1, t3));<o:p></o:p></p>
        <p class="MsoPlainText"><o:p> </o:p></p>
        <p class="MsoPlainText">This prints:<o:p></o:p></p>
        <p class="MsoPlainText"><o:p> </o:p></p>
        <p class="MsoPlainText">    1000<o:p></o:p></p>
        <p class="MsoPlainText">    1000<o:p></o:p></p>
        <p class="MsoPlainText"><o:p> </o:p></p>
        <p class="MsoPlainText">Given that t3 is exactly one millisecond
          later than t2, it does not seem reasonable that they can both
          be 1000 milliseconds later than t1.<o:p></o:p></p>
        <p class="MsoPlainText"><o:p> </o:p></p>
        <p class="MsoPlainText">The JavaDoc for between() states "The
          calculation returns a whole number, representing the number of
          complete units between the two temporals."<o:p></o:p></p>
        <p class="MsoPlainText"><o:p> </o:p></p>
        <p class="MsoPlainText">Assuming I have understood this
          correctly, I think MILLIS.between(t1, t3) is correct but
          MILLIS.between(t1, t2) should return 999.<o:p></o:p></p>
        <p class="MsoPlainText"><o:p> </o:p></p>
        <p class="MsoPlainText">Regards<o:p></o:p></p>
        <p class="MsoPlainText"><o:p> </o:p></p>
        <p class="MsoPlainText">Stuart Sharpe<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
      </div>
      <div><br>
        <div>
          <div>
            <div>
              <div>
                <div>
                  <div>This communication and any attachments are
                    confidential and intended solely for the addressee.
                    If you are not the intended recipient please advise
                    us immediately and delete it. Unless specifically
                    stated in the message or otherwise indicated, you
                    may not duplicate, redistribute or forward this
                    message and any attachments are not intended for
                    distribution to, or use by any person or entity in
                    any jurisdiction or country where such distribution
                    or use would be contrary to local law or regulation.
                    NatWest Markets Plc, NatWest Markets N.V., NatWest
                    Markets Securities Japan Limited and/or NatWest
                    Markets Securities Inc. (collectively "NatWest
                    Markets") accepts no responsibility for any changes
                    made to this message after it was sent.
                    <div>This communication, where prepared by the sales
                      and trading desk or desk strategists, may be
                      marketing material, desk strategy and/or trader
                      commentary. It is not a product of the research
                      department. This material may constitute an
                      invitation to consider entering into a derivatives
                      transaction under U.S. CFTC Regulations sections
                      1.71 and 23.605, where applicable, but is not a
                      binding offer to buy/sell any financial
                      instrument. The views of the author may differ
                      from others at NatWest Markets.
                      <div>Unless otherwise specifically indicated, the
                        contents of this communication and its
                        attachments are for information purposes only
                        and should not be regarded as an offer or
                        solicitation to buy or sell a product or
                        service, confirmation of any transaction, a
                        valuation, indicative price or an official
                        statement. Trading desks may have a position or
                        interest that is inconsistent with any views
                        expressed in this message. In evaluating the
                        information contained in this message, you
                        should know that it could have been previously
                        provided to other clients and/or internal
                        NatWest Markets personnel, who could have
                        already acted on it.
                        <div>NatWest Markets cannot provide absolute
                          assurances that all electronic communications
                          (sent or received) are secure, error free, not
                          corrupted, incomplete or virus free and/or
                          that they will not be lost, mis-delivered,
                          destroyed, delayed or intercepted/decrypted by
                          others. Therefore NatWest Markets disclaims
                          all liability with regards to electronic
                          communications (and the contents therein) if
                          they are corrupted, lost destroyed, delayed,
                          incomplete, mis-delivered, intercepted,
                          decrypted or otherwise misappropriated by
                          others.
                          <div>Any electronic communication that is
                            conducted within or through NatWest Markets
                            systems will be subject to being archived,
                            monitored and produced to regulators and in
                            litigation in accordance with NatWest
                            Markets’ policy and local laws, rules and
                            regulations. Unless expressly prohibited by
                            local law, electronic communications may be
                            archived in countries other than the country
                            in which you are located, and may be treated
                            in accordance with the laws and regulations
                            of the country of each individual included
                            in the entire chain.
                            <div>Copyright Â© NatWest Markets Plc. All
                              rights reserved. See
                              <a class="moz-txt-link-freetext" href="https://www.nwm.com/disclaimer">https://www.nwm.com/disclaimer</a> for further
                              risk disclosure (the agency arrangements
                              referred to in the further risk disclosure
                              between NatWest Markets Plc and NatWest
                              Markets N.V. are not applicable to
                              branches of NatWest Markets N.V.).
                            </div>
                          </div>
                        </div>
                      </div>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </blockquote>
    <br>
  </body>
</html>