Разбор строки даты с использованием java.text.SimpleDateFormat - PullRequest
0 голосов
/ 12 октября 2009

У меня странная проблема, мне нужно проанализировать строку даты, которая выглядит как 1997-02-14T00:00:00.0000000+05:30. Странная вещь в строке даты - информация о часовом поясе. Это +05:30 вместо обычного +0530.

У меня есть готовая строка базового формата, yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ, которая бы работала как брелок, если бы не информация о TZ.

Может кто-нибудь предложить решение этой проблемы? Есть ли какая-нибудь строка формата, которая может обрабатывать такую ​​информацию TZ?

Заранее спасибо.

Ответы [ 7 ]

5 голосов
/ 12 октября 2009

Я сам разбирался в этой проблеме несколько месяцев назад. Если я правильно помню, SimpleDateFormat недостаточно гибок, чтобы принимать другие форматы часовых поясов (у меня было +530). То, что я сделал, было простым этапом предварительной обработки - то есть попытка удалить двоеточие перед передачей String в SimpleDateFormat.

3 голосов
/ 12 октября 2009

Не можете ли вы предварительно обработать регулярное выражение и заменить часовой пояс, например,

String dateAndTime = ...
String preprocessed = dateAndTime.replace("([+-])(\\d\\d):(\\d\\d)$", "$1$2$3");
// Go on with your life 
2 голосов
/ 12 октября 2009

Конечно, всегда есть взлом предварительной обработки вашей строки .

Если никто не найдет лучшего ответа, это уже будет нечто. Вы можете инкапсулировать это в метод, с комментарием, чтобы объяснить взлом.

2 голосов
/ 12 октября 2009

Случайно ли это строка даты из файла XML (в формате ISO8601)? К сожалению, нет (простого) способа разобрать это с SimpleDateFormat, именно из-за ':' в части часового пояса, с которой SimpleDateFormat не может иметь дело должным образом.

Взгляните на мой ответ на этот другой вопрос о том, как анализировать строки даты и времени в XML.

2 голосов
/ 12 октября 2009

SimpleDateFormat должен принять это. От Документ :

Для разбора, общие часовые пояса также принято.

и эти указаны как :

GMTOffsetTimeZone:
             GMT Sign Hours : Minutes

что похоже на то, что у тебя есть?

Если это не помогло, то Joda DateTimeFormat заявляет, что делает это. Я бы соблазнился использовать Joda независимо от целого ряда причин (более согласованный и простой API, безопасность потоков для форматировщиков / анализаторов и т. Д.)

0 голосов
/ 15 сентября 2010

Я думаю, что следует использовать replaceAll метод String для regular expression.

String dateAndTime = ...
String preprocessed = dateAndTime.replaceAll("(GMT)([+-])(\\d\\d):(\\d\\d)", "$2$3$4");
0 голосов
/ 12 октября 2009

По краям все еще шероховато, но должно работать:

http://pastebin.com/f7bbb0b43

...