Java-Gaming.org Hi !
Featured games (90)
games approved by the League of Dukes
Games in Showcase (768)
Games in Android Showcase (230)
games submitted by our members
Games in WIP (854)
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 3108 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 (1340 views)
2018-06-10 19:43:48

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

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

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

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

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

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

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

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

Solater (808 views)
2018-03-17 05:04:08
Deployment and Packaging
by mudlee
2018-08-22 18:09:50

Java Gaming Resources
by gouessej
2018-08-22 08:19:41

Deployment and Packaging
by gouessej
2018-08-22 08:04:08

Deployment and Packaging
by gouessej
2018-08-22 08:03:45

Deployment and Packaging
by philfrei
2018-08-20 02:33:38

Deployment and Packaging
by philfrei
2018-08-20 02:29:55

Deployment and Packaging
by philfrei
2018-08-19 23:56:20

Deployment and Packaging
by philfrei
2018-08-19 23:54:46
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!