2014-12-05 68 views
0

1)我需要找出用戶的時區和時間。爲此我使用java轉換毫秒的日期對應的時區日期在java

Calendar currentdate1 = Calendar.getInstance(); 
TimeZone tz = Calendar.getInstance().getTimeZone(); 
System.out.println("time zone"+tz); 
System.out.println(tz.getDisplayName()); // (Now India Standard Time) 
System.out.println(tz.getID()); // (Now . Asia/Kolkata) 

通過使用此我需要找出相應時區user1的當前時間。

2)一個user2在那裏上傳視頻。我把它轉換成毫秒並存儲它的數據庫。 User1希望將user2的上傳時間視爲與他的時區對應的user1日期和時間。如何才能做到這一點。

回答

0

由於每次以毫秒爲單位存儲,所以不需要進行轉換。你正在以毫秒爲單位呈現正確格式的時間。考慮以下情形:

用戶2上傳視頻的日期對應於值t = 12345678911ms(這是一個絕對值,對應於1970年1月1日00:00的偏移量,並且不需要更改)

用戶1想要查看哪個日期和時間對應於其時區中基於的值t 。因此,建立正確的日曆/時區後

Calendar user1C = Calendar.getInstance();//Executed on the system of user1 this command will get the correct locale and timezone: 

你只需要設置基於用戶2的值t對用戶user1的日曆時間:

user1C.setTimeInMillis(t);//Sets the the time of the current calendar based on the value of user2 

如果現在您打印日曆時你會看到日期和對應的user2

System.out.println(user1C.getTime()); 
+0

但日曆user1C = Calendar.getInstance();在服務器上執行。它只顯示服務器日曆。它可能在美國。但用戶可能在另一個位置。 – 2014-12-06 06:27:27

+0

也許你應該改寫你的問題,因爲你不清楚你想要達到什麼樣的目標,並且設置是什麼?您沒有在user1機器上執行的客戶端代碼?你如何與服務器交互? – zabetak 2014-12-08 12:38:33

0

理解是很重要的時候,一個java.util.Date對象在時間的絕對點。沒有辦法從該對象獲取時區。 java.util.Date背後的長期價值可以解釋爲獲取日期(日期字符串)人們通常使用它的方式。這取決於格式化程序對象使用的時區。

您還可以從日期字符串中獲取java.util.Date對象。結果取決於日曆對象用於轉換/解析的時區。

這個例子可能會有幫助:

import java.text.SimpleDateFormat; 
import java.util.Calendar; 
import java.util.Date; 
import java.util.GregorianCalendar; 
import java.util.TimeZone; 


public class Test { 

    public static void main(final String[] args) { 
     Date now = new Date(); 
     printDateForBerlinAndKolkata(now, "Current Time:"); 

     Calendar cal1 = new GregorianCalendar(TimeZone.getTimeZone("Europe/Berlin")); 
     Calendar cal2 = new GregorianCalendar(TimeZone.getTimeZone("Asia/Kolkata")); 

     cal1.set(2014, 11, 5, 15, 30); 
     printDateForBerlinAndKolkata(cal1.getTime(), "Gregorian Calendar 2014-12-05 15:30 Timezone for Berlin:"); 

     cal2.set(2014, 11, 5, 15, 30, 0); 
     printDateForBerlinAndKolkata(cal2.getTime(), "Gregorian Calendar 2014-12-05 15:30 Timezone for Kolkata:"); 
    } 

    private static void printDateForBerlinAndKolkata(Date now, String headline) { 
     System.out.println(headline); 
     System.out.println("---------------------------------------------"); 
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy MMM dd HH:mm:ssZ"); 
     sdf.setTimeZone(TimeZone.getTimeZone("Europe/Berlin")); 
     System.out.println("Europe/Berlin: " + sdf.format(now)); 
     sdf.setTimeZone(TimeZone.getTimeZone("Asia/Kolkata")); 
     System.out.println("Asia/Kolkata: " + sdf.format(now)); 
     System.out.println("long value: " + now.getTime()); 
     System.out.println("=============================================\n"); 
    } 

} 

輸出:

Current Time: 
--------------------------------------------- 
Europe/Berlin: 2014 Dez 05 16:35:21+0100 
Asia/Kolkata: 2014 Dez 05 21:05:21+0530 
long value: 1417793721481 
============================================= 

Gregorian Calendar 2014-12-05 15:30 Timezone for Berlin: 
--------------------------------------------- 
Europe/Berlin: 2014 Dez 05 15:30:21+0100 
Asia/Kolkata: 2014 Dez 05 20:00:21+0530 
long value: 1417789821506 
============================================= 

Gregorian Calendar 2014-12-05 15:30 Timezone for Kolkata: 
--------------------------------------------- 
Europe/Berlin: 2014 Dez 05 11:00:00+0100 
Asia/Kolkata: 2014 Dez 05 15:30:00+0530 
long value: 1417773600506 
============================================= 

也許下面鏈接的興趣也: Wikipedia Article on Unix Time

+0

但是如何獲得用戶的時區。通過使用日曆currentdate1 = Calendar.getInstance(); TimeZone tz = Calendar.getInstance()。getTimeZone();只獲得服務器時區。我如何識別客戶端時區。 – 2014-12-06 06:39:07

+0

@PriyankaShaju您可以詢問用戶或做其他一些CLIENTSIDE魔術。 – Christopher 2014-12-11 13:28:05