2010-11-28 180 views
1

我有一個移動應用程序,它捕獲一個日期/時間並以毫秒爲單位發送給一個servlet。 - 例如,我在我的手機中捕獲12:55 AM並將其發送到我的服務器 -如何在沒有時區的情況下打印日期?

因此,我從發送的毫秒中構建日期並使用SimpleDateFormat打印它,但時間不同,它會打印8:55 AM 。 我知道問題是因爲我使用了2個不同的時區,我的問題是: 如何顯示那個時間而不應用任何時區來顯示同一時間?

在此先感謝

回答

3

您需要使用日曆更改時區,但沒有API爲。

// Change a date in another timezone 
public static Date changeTimeZone(Date date, TimeZone zone) { 
    Calendar first = Calendar.getInstance(zone); 
    first.setTimeInMillis(date.getTime()); 

    Calendar output = Calendar.getInstance(); 
    output.set(Calendar.YEAR, first.get(Calendar.YEAR)); 
    output.set(Calendar.MONTH, first.get(Calendar.MONTH)); 
    output.set(Calendar.DAY_OF_MONTH, first.get(Calendar.DAY_OF_MONTH)); 
    output.set(Calendar.HOUR_OF_DAY, first.get(Calendar.HOUR_OF_DAY)); 
    output.set(Calendar.MINUTE, first.get(Calendar.MINUTE)); 
    output.set(Calendar.SECOND, first.get(Calendar.SECOND)); 
    output.set(Calendar.MILLISECOND, first.get(Calendar.MILLISECOND)); 

    return output.getTime(); 
} 

鏈接:http://blog.vinodsingh.com/2009/03/date-and-timezone-in-java.html

我認爲這應該工作。我沒有廣泛測試它。

2

日曆和日期對象以毫秒爲單位存儲與UTC有關的日期信息。

(差值,以毫秒爲單位,當前時間和午夜,1970年1月1日之間UTC)

這意味着,日曆/日期的對象不存儲不同的時區不同的值。它們在內部始終使用相同的值...格式通常會發生變化。

也許你可以在你的本地/默認時區使用的SimpleDateFormat:

SimpleDateFormat sdf = new SimpleDateFormat("S") 
Date d = sdf.parse(milliseconds); 

您也可以嘗試更改日期格式的時區,直到您的預期輸出匹配。

sdf.setTimeZone(TimeZone.getTimeZone("GMT-8")); 
System.out.println(sdf.toString()); 

sdf.setTimeZone(TimeZone.getTimeZone("GMT-4")); 
System.out.println(sdf.toString()); 
相關問題