簡體   English   中英

SimpleDateFormat 在將日期轉換為 String 時更改日期

[英]SimpleDateFormat change date while converting it to String

在我的應用程序中,我使用SimpleDateFormat將 Date 對象轉換為字符串。 但是有的時候我一一更改時區,測試我輸入的日期是否與轉換成字符串的日期相同,卻發現顯示的是不同的日期。 例如,假設我的 Date 對象中有Thu Mar 15 00:00:00 GMT+08:00 2012 ,現在當我使用 SimpleDateFormat 將其轉換為字符串時,它工作正常,但是當我一一更改時區並檢查轉換為字符串的日期是否與存儲在 Date 對象中的日期相同,然后在某些情況下它顯示為14-Mar-2012而不是顯示15-Mar-2012 為什么會發生這種情況? 誰能建議我如何解決這個問題?

我使用過的代碼:

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

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

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;
 }

例如,假設我的 Date 對象中有 Thu Mar 15 00:00:00 GMT+08:00 2012,

你還沒有得到那個(盡管這無疑是toString顯示的內容)。 Date對象不包含時區。 它包含一個瞬間,根據您用來解釋它的日歷和時區,可以將其解釋為不同的日期和時間。 所以那是某個特定時區的午夜 - 但Date對象本身只是 unix 紀元以來的幾毫秒。

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

在您的 SimpleDateFormat 中,提及語言環境,

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

您可以選擇語言環境。 例如,我使用 Locale.ENGLISH 因為它包含我需要的日期格式。 否則,當您更改設備中的語言環境時,simpledateformat 會更改為當前語言環境,最終會得到錯誤的日期。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM