2015-01-20 3 views
0

я имел String в таком виде, EEE, dd MMM yy hh:mm:ss Z, и я хотел, чтобы преобразовать его в Date объект, так что я сделал это,предотвращение использования SimpleDateFormatter дважды

SimpleDateFormat fDate = new SimpleDateFormat("EEE, dd MMM yy hh:mm:ss Z",Locale.getDefault()); 

Затем я создал поле экземпляра типа Date

Date toDate = null;

и разобрать мою String дату и сохранить его в toDate

toDate = fDate.parse(stringDate);

Теперь дата хранится в toDate переменной в этой форме,

Tue Jan 20 07:33:06 GMT+05:30 2015

, но это не то, что я хотел. Я хотел, чтобы мой окончательный Date объекта в таком виде,

Tue Jan 20, 2015

Таким образом, для того, чтобы достичь этого, я создал новый объект Calendar и установите время toDate,

Calendar s = Calendar.getInstance(); 
s.setTime(toDate); 

я создайте новый String и храните Day of Week, MonthDay of Month и year чтобы получить такой формат Tue Jan 20, 2015.

String newDate = s.getDisplayName(Calendar.DAY_OF_WEEK,0,Locale.getDefault()) + " " 
+ s.getDisplayName(Calendar.MONTH, 0, Locale.getDefault()) 
+ " " + s.get(Calendar.DAY_OF_MONTH) + "," 
+ s.get(Calendar.YEAR); 

Теперь моя новая строка newDate имеет дату в таком виде Tue Jan 20, 2015 и проблема это String объекта, а не Date объекта, и для того, чтобы преобразовать его в Date объекта я должен использовать SimpleDateFormatter еще раз.

Но это много работы, потому что для того, чтобы преобразовать String этой формы, EEE, dd MMM yy hh:mm:ss Z в Date объект этой формы, Tue Jan 20, 2015, я сначала с помощью SimpleDateFormatter тогда я разбор его в Date объекте, затем извлечь мои поля желаний из этого объекта Date, используя Calendar и храните в String, а затем конвертируйте это String обратно в объект Date.

Есть ли более простой способ достичь этого? то есть преобразование этого StringEEE, dd MMM yy hh:mm:ss Z непосредственно в этот формат Tue Jan 20, 2015 типа Date без использования SimpleDateFormatter в два раза?

+5

«Дата» не имеет формата. «Дата» - это временная концепция. A_format_ - это то, что вы применяете для понимания или выражения этой концепции. –

+0

, значит, вы имеете в виду объект 'Date', который никогда не может соответствовать произвольному формату? и он всегда будет равен полной дате, включая время, день, год, второй, локаль и т. д.? – bhuvesh

+0

«Дата» представляет временную метку. День, год, секунда и т. Д. - это читаемая человеком информация. Чтобы получить эту информацию, вам нужно «форматировать» 'Date'. Это не часть «Дата». –

ответ

1

Хотя Дата библиотеки Java, как известно, плохо (что в значительной степени, почему каждый использует Joda-Time библиотеку, и почему Oracle выпустила новую java.time package с Java 8 (см article), есть несколько вещей, чтобы быть в курсе:

  1. ВСЕ java.util.Date представляет собой число миллисекунд с midnight, Jan 1, 1970 in UTC. Иными словами, java.util.Дата - это всего лишь небольшая обертка вокруг значения long.
  2. Таким образом, java.util.Date НЕ хранит информацию о каком-либо формате. Date.toString() всегда создает строку в удобном для чтения формате «отладки».
  3. Чтобы ответить на ваш вопрос, нет, на самом деле нет способа предотвратить использование SimpleDateFormatter дважды, но я не понимаю, почему вы хотели бы этого избежать, кроме того, похоже, что вы неправильно понимаете понятия о том, что Дата представляет. Если у вас есть java.lang.String и вы хотите преобразовать его в java.util.Date, вы используете DateFormat.parse(), и если у вас есть java.util.Date и вы хотите преобразовать его в java.lang .String, вы используете DateFormat.format().