Разбор строки в Date с DateFormat не выполняется правильно - PullRequest
2 голосов
/ 12 ноября 2010

Я искал повсюду и просто не могу найти объяснения или причины, почему это происходит, но метод DateFormat синтаксического анализа (String) просто неправильно анализирует мою строку.

Я пытаюсь проанализировать строку в формате даты, который используется для заголовков HTTP и дошел до получения строки самостоятельно, такой как:

Thu, 11 Nov 2010 18:34:22 GMT

в формате:

E, d MMM yyyy HH:mm:ss z

Но когда я использую df.parse(dateStr);, это то, что я получаю из этого:

Thu Nov 11 18:34:22 GMT 2010

Что не похоже на то, что я хотел, почему сейчас год после GMT? Почему больше нет запятой? И почему дата после месяца?

Я сейчас совершенно запутался в этом и не могу найти решение, но мне действительно нужна дата в этом формате. Запятая все портит? или двоеточия?

Спасибо за ваше время,

Infinitifizz

приписка

Забыл упомянуть об этом, но я пробовал dateformat.setLenient (false), и это не имеет значения.

P.P.S

Я пытаюсь сделать это, чтобы сравнить даты с date1.before (date2) и after () и т. Д., Чтобы увидеть, является ли один новее другого, но я не могу этого сделать, потому что синтаксический анализ не работает.

Несмотря на то, что они выглядят одинаково, но только формат отличается, они не одинаковы, потому что после вызова getTime () для них обоих (когда я предоставил 2 одинаковые даты), long не совпадают. Как в дате:

Чт, 11 ноября 2010 19:38:52 GMT для lastModified () для файла

Если я введу строку «Чт, 11 ноября 2010 г. 19:38:52 GMT», а затем сравню их длинные значения, после преобразования строки в дату с помощью parse () и последующего вызова getTime () в эту дату, я получаю:

lastModified = 1289504332671 fromString = 1289504332000

Отличаются только последние 3 цифры, имеет ли это какое-либо значение?

Еще раз спасибо за ваше время и извините, я не поставил этот бит первым,

Infinitifizz

1 Ответ

8 голосов
/ 12 ноября 2010

Формат результата - это формат по умолчанию Date#toString() (нажмите на ссылку, чтобы увидеть Javadoc).Вы, очевидно, делаете System.out.println(date).Вместо этого вы можете использовать SimpleDateFormat#format() с другим шаблоном для форматирования его в желаемом формате.Например,

String newDateStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);

Обновление : Вам не нужно заботиться о формате при использовании Date.Вы должны заботиться о формате в тот момент, когда Date должен быть преобразован (отображен) как String.Что касается разницы во временных метках, Date использует точность в миллисекундах для временной метки, в то время как HTTP-заголовок использует вторую точность.Вы хотите разделить временные метки на 1000, прежде чем сравнивать.

...