2012-03-20 71 views
2

實際上,在我的應用程序中,我使用SimpleDateFormat將Date對象轉換爲字符串。但有時當我逐個更改時區以測試我輸入的日期是否與轉換爲字符串的日期相同時,我發現它顯示不同的日期。例如,假設我在Date對象中有Thu Mar 15 00:00:00 GMT + 08:00 2012,現在當我使用SimpleDateFormat將其轉換爲字符串時,它工作正常,但是當我逐個更改時區並檢查是否轉換爲字符串的日期與存儲在Date對象中的日期相同,因此某些情況下顯示爲2012年3月14日,而不是2012年3月15日。爲什麼會發生這種情況。任何人都可以請建議我解決這個問題。我已經使用SimpleDateFormat更改日期,同時將其轉換爲字符串

代碼是

SimpleDateFormat m_sdFormatter = new SimpleDateFormat("dd-MMM-yyyy"); 
String selected_date = m_sdFormatter.format(btnSelectedDt.getTime()); 
+0

由於不同時區的日期更改按時區... http://tutorials.jenkov.com/java-date-time/java-util-timezone.html – 2012-03-20 07:02:06

+0

您是否找到解決此問題的解決方案? – portfoliobuilder 2016-10-15 22:52:31

回答

0

試試這個,希望它可以幫助你..

private String getDate(long timeStamp) { 
    DateFormat objFormatter = new SimpleDateFormat("dd-MM-yyyy"); 
    objFormatter.setTimeZone(TimeZone.getDefault()); 

    Calendar objCalendar = Calendar.getInstance(TimeZone.getDefault()); 
    objCalendar.setTimeInMillis(timeStamp * 1000); 
    String result = objFormatter.format(objCalendar.getTime()); 
    objCalendar.clear(); 
    return result; 
} 
+0

謝謝..但我已經試過這段代碼..... – AndroidDev 2012-03-20 07:02:07

+0

好吧,讓我試着爲你找到解決方案.. – Hasmukh 2012-03-20 07:04:14

0

例如,假設我有周四年03月15日00:00:00 GMT + 2012年8月8日在我的Date對象中,

你還沒有(即使這是無疑的什麼toString顯示器)。 A Date對象不包含時區。它包含時間上的即時,根據您用來解釋它的日曆和時區,它可以解釋爲不同的日期和時間。所以這是午夜在一次特定時區 - 但Date對象本身只是自unix時代以來的毫秒數。

目前尚不清楚你在做什麼,但你應該不會感到驚訝的是,更改SimpleDateFormat中使用的時區會改變寫出的日期。如果您可以更詳細地描述更大的目標是什麼,我們可能會幫助您更多。請注意,如果您可以使用Joda Time來代替,那麼這是一個更好的日期/時間API - 但我知道這對於在Android應用程序中使用非常大。

0

在你的SimpleDateFormat,何況現場,

DateFormat objFormatter = new SimpleDateFormat("dd-MM-yyyy", locale); 

其中locale是您的首選。例如,我使用Locale.ENGLISH,因爲它包含我需要的日期格式。否則,當您更改設備中的區域設置時,simpledateformat將更改爲當前區域設置,並最終得到錯誤的日期。