Java-Gaming.org Hi !
Featured games (91)
games approved by the League of Dukes
Games in Showcase (757)
Games in Android Showcase (229)
games submitted by our members
Games in WIP (844)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
    Home     Help   Search   Login   Register   
Pages: [1]
  ignore  |  Print  
  millisecond & nanosecond precision replacement for system.currentTimeMillis()  (Read 3070 times)
0 Members and 1 Guest are viewing this topic.
Offline pepe

Junior Devvie




Nothing unreal exists


« Posted 2006-02-01 10:59:46 »

Tired of not being able to get the time with a millisecond precision on windows?
Here is a 'fix'. Works on 1.5+ only.
That was submitted (in a somewhat different and reduced version) as a RFE to Sun, today. /me crosses fingers...

note: also includes a nanosecond precise date, but which is not -of course- compatible with Date class and others.

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
32  
33  
34  
35  
36  
37  
38  
39  
40  
41  
42  
43  
44  
45  
46  
47  
48  
49  
50  
51  
52  
53  
54  
55  
56  
57  
58  
59  
60  
61  
62  
63  
64  
65  
66  
67  
68  
69  
70  
71  
72  
73  
/**
 * DOCUMENT ME!
 *
 * @author pepe
 */

public class PreciseInternalDate
{
    //~ Static fields/initializers *********************************************
    /** DOCUMENT ME! */
    static long lastDate;

    /** DOCUMENT ME! */
    static long lastDateNanos;

    /** DOCUMENT ME! */
    static long nanos;

    static
    {
        lastDate          = System.currentTimeMillis(  );
        nanos             = System.nanoTime(  );
        lastDateNanos     = lastDate * 1000000;
    }

    //~ Constructors ***********************************************************
    /**
     * Creates a new instance of PreciseInternalDate
     */

    private PreciseInternalDate(  ) {}

    //~ Methods ****************************************************************
    /**
     * DOCUMENT ME!
     *
     * @return DOCUMENT ME!
     */

    static public long currentTimeMillis(  )
    {
        checkForClockReset(  );

        return lastDate + ( ( System.nanoTime(  ) - nanos ) / 1000000 );
    }


    /**
     * DOCUMENT ME!
     *
     * @return DOCUMENT ME!
     */

    static public long currentTimeNanos(  )
    {
        checkForClockReset(  );

        return lastDateNanos + ( System.nanoTime(  ) - nanos );
    }


    /**
     * DOCUMENT ME!
     */

    static private void checkForClockReset(  )
    {
        long newCurTime = System.currentTimeMillis(  );
        long predicted = lastDate + ( ( System.nanoTime(  ) - nanos ) / 1000000 );
        long delta = predicted - newCurTime;

        if ( ( delta > 200 ) || ( delta < 0 ) ) // let's say that if there is a decal of over 200ms, the clock got reset and we need to change the date accordingly (could be the user changing date on his machine, or through nntp server)
        { // also, delta should only be positive, because predicted is of better precision than newCurtime. Otherwise, it might also be a clock reset.
            lastDate          = newCurTime;
            lastDateNanos     = newCurTime * 1000000;
        }
    }
}


Disclaimer: this code is not intended to be ran in a nuclear facility, nor it should run in a machine with an uptime greater than 292 years. Wink

Home page: http://frederic.barachant.com
------------------------------------------------------
GoSub: java2D gamechmark http://frederic.barachant.com/GoSub/GoSub.jnlp
Offline HamsterofDeath

Junior Devvie




Java games rock!


« Reply #1 - Posted 2006-02-04 01:53:41 »

jalopy rocks.
Offline pepe

Junior Devvie




Nothing unreal exists


« Reply #2 - Posted 2006-02-04 11:31:07 »

Arf.... Yes, pretty much. But my lazyness breaks it down. :/

My rfe got closed... "not a bug".. well, yes, of course.. :s
At least it got reviewed and there were some meaningful comments...I'm just a bit decieved they didn't scratch the surface more than that. Bah, i just asked for it, the class was not complete...

Home page: http://frederic.barachant.com
------------------------------------------------------
GoSub: java2D gamechmark http://frederic.barachant.com/GoSub/GoSub.jnlp
Games published by our own members! Check 'em out!
Legends of Yore - The Casual Retro Roguelike
Offline pepe

Junior Devvie




Nothing unreal exists


« Reply #3 - Posted 2006-04-27 10:49:15 »

Just in case someone is interested, i did open a java.net project with a much better (documented, clean, enhanced) version of that code.
https://preciseinternaldate.dev.java.net/

Home page: http://frederic.barachant.com
------------------------------------------------------
GoSub: java2D gamechmark http://frederic.barachant.com/GoSub/GoSub.jnlp
Pages: [1]
  ignore  |  Print  
 
 

 
EgonOlsen (79 views)
2018-06-10 19:43:48

EgonOlsen (59 views)
2018-06-10 19:43:44

EgonOlsen (78 views)
2018-06-10 19:43:20

DesertCoockie (261 views)
2018-05-13 18:23:11

nelsongames (159 views)
2018-04-24 18:15:36

nelsongames (158 views)
2018-04-24 18:14:32

ivj94 (901 views)
2018-03-24 14:47:39

ivj94 (162 views)
2018-03-24 14:46:31

ivj94 (813 views)
2018-03-24 14:43:53

Solater (177 views)
2018-03-17 05:04:08
Java Gaming Resources
by philfrei
2017-12-05 19:38:37

Java Gaming Resources
by philfrei
2017-12-05 19:37:39

Java Gaming Resources
by philfrei
2017-12-05 19:36:10

Java Gaming Resources
by philfrei
2017-12-05 19:33:10

List of Learning Resources
by elect
2017-03-13 14:05:44

List of Learning Resources
by elect
2017-03-13 14:04:45

SF/X Libraries
by philfrei
2017-03-02 08:45:19

SF/X Libraries
by philfrei
2017-03-02 08:44:05
java-gaming.org is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑gaming.org
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!