2011-03-31 185 views
0

我想在java中找到时间差异,这样如果会话过期,我可以创建新的会话,否则将创建新的时间。查找时间差异

+2

你甚至没有一半清楚! – adarshr 2011-03-31 09:31:43

+0

你能不能详细说一下 – 2011-03-31 09:31:46

+0

你是不是指这个http://stackoverflow.com/questions/2027100/best-way-to-calculate-differnce-between-two-times-in-java? – 2011-03-31 09:34:25

回答

3
Returns Time Diffrence in Seconds : 




long elapsed_time = 0L; 
    java.util.Date startTime = null; 
    java.util.Date endTime = null; 
    double fsec = 0L; 
    String rSec = ""; 

     startTime = new java.util.Date(); 

     <--------Some Operation-----> 

     endTime = new java.util.Date(); 
     elapsed_time = endTime.getTime() - startTime.getTime(); 
     fsec = (elapsed_time)/1000.00; 
     rSec = Double.toString(fsec); 
     rSec = rSec + " Sec"; 
+0

+0:使用日期体重相对较重,通常不准确。 – 2011-03-31 10:26:02

3

您可以使用System.currentTimeMillis();来获取Java中的当前系统时间(以毫秒为单位,格林威治标准时间01-01-1970 00:00:00 GMT)。

会话对象很可能也有一个方法来获取会话最后一次使用的时间(在您使用的任何会话对象的API文档中查看它)。

从会话中减去当前时间,并知道会话上次使用以来的时间。如果它超过了超时时间,请做任何你必须做的事情。

请注意,servlet容器具有用于使会话失效的内置机制,您无需手动使会话无效。另外,如果没有会话,HttpRequest.getSession()将自动为您创建一个新的HttpSession对象。

2

使用日期意味着创建一个对象,是不需要,因为它只是包装System.currentTimeMillis()遗憾的是此功能只精确到充其量是一个毫秒和大约16毫秒在某些Windows系统。

更好的方法是使用System.nanoTime()在Oracle的JVM上,在Windows XP-7,Solaris和最新版本的Linux上,此准确度优于1微秒。它不会创建任何对象。

long start = System.nanoTime(); 
// do something. 
long time = System.nanoTime() - start; // time in nano-seconds. 
// time in seconds to three decimal places 
String timeTaken = time/1000000/1e3 + " seconds"; 
+0

实际上并不能保证“nanoTime()”的准确性。 Java API并不能保证它精确到小于1微秒。但是这比使用java.util.Date对象更好。 – Jesper 2011-03-31 12:10:26

+0

@Jesper,我同意没有保证。然而,Oracle的JVM恰好在Windows XP - 7,Solaris和最新版本的Linux上执行此操作。 – 2011-03-31 12:13:16

+1

是真实的,但也许你应该提到,不要说没有告诫它是准确的,小于1微秒。 – Jesper 2011-03-31 12:15:49