2010-10-01 108 views
2

給出了時間戳1245613885這是格林尼治時間的時間戳如何將UTC時間戳轉換爲Java中的本地日,小時和分鐘?

如何使用服務器的本地時區信息將其轉換爲Java,Year,Hour,Minute值?

+0

有沒有什麼理由你對這幾個月不感興趣,我可以理解丟下秒或毫秒。或者你的意思是每年而不是每月的一天。 – 2010-10-01 21:21:57

回答

6

您可以使用java.util.Calendar。它提供了一個setTimeZone()方法(這是多餘的,因爲它默認已經選擇了系統默認的時區)。

long timestamp = 1245613885; 
Calendar calendar = Calendar.getInstance(); 
calendar.setTimeZone(TimeZone.getDefault()); 
calendar.setTimeInMillis(timestamp * 1000); 

int year = calendar.get(Calendar.YEAR); 
int day = calendar.get(Calendar.DATE); 
int hour = calendar.get(Calendar.HOUR_OF_DAY); 
int minute = calendar.get(Calendar.MINUTE); 

如果您想目前它在人類可讀的日期字符串,那麼我建議SimpleDateFormat這一點。

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
String dateString = sdf.format(calendar.getTime()); 
System.out.println(dateString); // 2009-06-21 15:51:25 

(輸出是按我的時區格林尼治標準時間4正確)

-1
Calendar calendar = new GregorianCalendar(TimeZone.getTimeZone("America/Los_Angeles"), Locale.US); 
calendar.setTimeInMillis(1245613885 * 1000); 
int year = calendar.get(Calendar.YEAR); 
int day = calendar.get(Calendar.DAY_OF_YEAR); 
int hour = calendar.get(Calendar.HOUR_OF_DAY); 
int minute = calendar.get(Calendar.MINUTE); 

更改TimeZone值要傳遞到Calendar對象的構造函數,如果你需要一個不同的時區。

+0

UTC時間戳記表示爲從時代開始的秒數。 java.util.Calendar使用從紀元開始的毫秒數,因此您需要在日曆上設置時間時乘以1000。 – 2010-10-01 21:24:19

+0

你是對的,我已經更新了這一行。儘管如此,是一個downvote? Sheesh ... – 2010-10-01 21:25:37

+0

您可以使用'@ nickname'來定位某人的評論,這樣他/她將收到有關全球收件箱中評論和最近活動的通知。請注意,當你是提問者或回答者時,這是不必要的。另請參閱[this answer](http://meta.stackexchange.com/questions/1093/make-recent-activity-and-responses-show-new - 關於元的評論 - 問題 - 答案 - 我有/ 35913#35913)。 – BalusC 2010-10-01 21:50:57

0

基本上你只需要一個格式化做到這一點

日期日期=新的日期(1245613885L * 1000);
SimpleDateFormat formatter = new SimpleDateFormat('MM/dd/yyyy');
System.out.println(formatter.format(date));

2
import java.util.Calendar; 
import java.util.TimeZone; 

public class Example{ 
    public static void main(String[] args){ 
     long utcTimestamp = 1285578547L; 
     Calendar cal = Calendar.getInstance(TimeZone.getDefault()); 
     cal.setTimeInMillis(utcTimestamp * 1000); 
     System.out.println(cal.get(Calendar.YEAR)); 
     System.out.println(cal.get(Calendar.MONTH)); 
     System.out.println(cal.get(Calendar.DAY_OF_MONTH)); 
     System.out.println(cal.get(Calendar.DAY_OF_YEAR)); 
     System.out.println(cal.get(Calendar.HOUR)); 
     System.out.println(cal.get(Calendar.MINUTE)); 
    } 
} 
1

我會使用類似喬達時間,這比JDK日期/ Calendar類快得多,也沒有與日期解析(那不是你的問題涉及到日期解析)

線程安全問題
+2

+1,如果只是爲了表示聲援99.99%的人類誰想要現有的JDK日曆東西去死一個火熱的死亡。 --JA – andersoj 2010-10-01 21:32:53

相關問題