2014-01-26 36 views
1

時間戳我wanto得到的時間戳和5秒到它。我想這個代碼獲得的Java

GregorianCalendar cal = new GregorianCalendar(2007, 9 - 1, 23); 

       int period = Integer.parseInt(5); 
       cal.add(Calendar.SECOND, period); 
       long millis = cal.getTimeInMillis(); 

       String timeStamp = String.valueOf(millis); 

但我總是得到相同的結果1190498405000,甚至一小時後。

編輯: 我想這個代碼,但我'不知道,如果它的正確

java.util.Calendar cal2 = java.util.Calendar.getInstance(); 
       System.out.println("Instance before : "+ cal2.getTimeInMillis()); 
       cal2.add(java.util.Calendar.SECOND, 5); 

       System.out.println("Instance after : "+ cal2.getTimeInMillis()); 

實例之前:1390784737521 實例後:1390784742521

所以之前它的準確時間,第二個是+ 5秒?

+2

請發佈編譯的代碼。 –

+0

你每次都在同一時間播種日曆,所以你不期望它會返回相同的結果嗎? –

+0

定義「時間戳」。 Java中的時間通常是Unix時代以來的毫秒數。默認API中的Date(包括'Calendar','java.sql.Timestamp'和其他日期/時間組件)沒有格式意義。 – MadProgrammer

回答

0

你忘了之前打印。嘗試在此之前

public static void main(String[] args) { 
    // java.util.Calendar cal = new java.util.GregorianCalendar(2007, 9 - 1, 23); 
    // Current time would be.... 
    java.util.Calendar cal = java.util.Calendar.getInstance(); 
    // ^------ The current time. 
    System.out.println("Before: " + cal.getTimeInMillis()); 
    // v------ Add five seconds 
    cal.add(java.util.Calendar.SECOND, 5); 
    System.out.println("After: " + cal.getTimeInMillis()); 
} 

輸出(帶有一個固定的日期)

Before: 1190520000000 
After: 1190520005000 

路輸出(與當前時間)

Before: 1390789209073 
After: 1390789214073 
+0

是的,但我每次都會得到這個結果!我需要確切的時間。也許我必須使用getInstance?我編輯了我的帖子,你可以看看 – user567

+0

這是正確的。 –

0

你有沒有嘗試過這樣的:

Date d1= initDate();//initialise your date to any date 
Date d2 = new Date(d1.getTime() + 5 * 1000); //add 5 seconds 
0

固定瞬間

你似乎是困惑的java.util.Date &的java.util.Calendar類的性質。它們代表了宇宙時間軸上的固定時刻,而不是正在進行的移動時鐘。

計算機(因此你JVM)已經有一個物理時鐘跟蹤持續時間。日期&日曆類會詢問當前時間的物理時鐘,然後記錄該時刻。或者課程從過去(或未來)重新創造一個時刻。但日期/日曆實例中存儲的日期和時間不會更改,不會隨時鐘一起前滾。

定時器

如果您正在尋找在某個時間到必須解僱一些事件,看到與Java捆綁Timer class

喬達時間

順便說一句,與java.util.Date &的java.util.Calendar類是出了名的麻煩。多年以來,第三方開源Joda-Time庫曾作爲流行的替代品。

Joda-Time與日期/日曆類相似,其中DateTime表示時間線上的固定時刻。在內部,java.util.Date和Joda-Time都保留一個長整數,這是自1970年初以來的毫秒數(Unix Epoch)的UTC/GMT(無時區偏移量)。這個數字一個時間的DateTime商店區偏移。

DateTime now = new DateTime(); // Current date-time in default time zone. 

一般最好指定一個時區...

DateTime nowInBoston = new DateTime(DateTimeZone.forID("America/New_York")); 

代表了一會兒過去......

DateTime aMomentInThePastInBoston = new DateTime(2007, 9, 23, 13, 14, 15, DateTimeZone.forID("America/New_York")); 

喬達時間大多是不可變的(線程安全)。所以我們創建新的實例而不是改變現有實例中的數據。讓我們以上面創建的實例爲同一日期和時區創建一個新實例,但將其時間設置爲一天的第一個時刻(通常意味着時間爲00:00:00)...

DateTime firstMomentOfThatPastDayInBoston = aMomentInThePastInBoston.withTimeAtStartOfDay(); 

執行此代碼時,每個DateTime實例都位於內存中。他們的日期時間值(即長整數)保持不變。

如果你想提取毫秒紀元以來(也許這就是你的「時間戳」的意思),調用getMillis方法的數...

long millisSinceEpoch = firstMomentOfThatPastDayInBoston.getMillis(); // Use 'long' not 'int'! 

警惕使用這種基於整數的「時間戳」的。不同的編程語言,庫,數據庫引擎,文件系統和其他系統在各種時期使用各種計數(秒,毫秒,納秒)(1970年1月1日的Unix式不是唯一的時代)。傳遞一個原始整數值會變得棘手。

如果你需要使用的java.util.Date與其他班級,轉換...

java.util.Date date = firstMomentOfThatPastDayInBoston.toDate(); 

搜索StackOverflow上的「喬達」,找到更多的例子。

的Java 8

在Java 8,新java.time.* package是捆綁在一起的Java平臺。這些新課程由JSR 310定義,取代舊的捆綁課程,並受Joda-Time的啓發。