2011-03-31 190 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