SimpleDateFormat изменить дату при преобразовании ее в строку - PullRequest
2 голосов
/ 20 марта 2012

На самом деле в моем приложении я использую SimpleDateFormat для преобразования объекта Date в строку.Но иногда, когда я меняю часовой пояс один за другим, чтобы проверить, совпадает ли дата, которую я ввел, с датой, преобразованной в строку, я обнаружил, что она показывает другую дату.Например, предположим, что у меня 15 марта 00:00:00 GMT + 08: 00 2012 в моем объекте Date, теперь, когда я преобразую его в строку, используя SimpleDateFormat, он работает нормально, но когда я меняю часовой пояс по одному и проверяю,дата, преобразованная в строку, совпадает с датой, хранящейся в объекте Date, и в некоторых случаях отображается как 14 марта 2012 года, а не 15 марта 2012 года.почему это произошло. Может кто-нибудь предложить мне решить эту проблему.

Код, который я использовал, является

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

Ответы [ 3 ]

0 голосов
/ 20 марта 2012

Например, предположим, что у меня 15 марта, 00:00:00 GMT + 08: 00 2012, в моем объекте Date,

У вас этого нет (хотя это не таксомневаюсь что показывает toString).Объект Date не содержит часовой пояс.Он содержит момент времени, который можно интерпретировать как разные даты и время в зависимости от календаря и часового пояса, которые вы используете для его интерпретации.Так что это полночь в одном конкретном часовом поясе - но сам объект Date составляет всего несколько миллисекунд с начала эпохи Unix.

Не совсем точно, что вы делаете, ноВы не должны удивляться, что изменение часового пояса, используемого в SimpleDateFormat, изменит записанную дату.Если вы сможете более подробно описать, что является более важной целью, мы можем помочь вам больше.Обратите внимание, что если вместо этого вы можете использовать Joda Time , это намного лучший API для даты и времени - но я знаю, что он достаточно велик для использования в приложении для Android.

0 голосов
/ 20 марта 2012

В вашем SimpleDateFormat укажите локаль,

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

, где локаль по вашему выбору.Например, я использую Locale.ENGLISH, поскольку он содержит нужный мне формат даты.В противном случае, когда вы меняете локаль на устройстве, формат простого символа меняется на текущую локаль, и в итоге вы получаете неправильную дату.

0 голосов
/ 20 марта 2012

попробуйте это, надеюсь, это может помочь вам ..

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;
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...