Ответ 1
Не можете ли вы предварительно обработать регулярное выражение и заменить часовой пояс, например.
String dateAndTime = ...
String preprocessed = dateAndTime.replace("([+-])(\\d\\d):(\\d\\d)$", "$1$2$3");
// Go on with your life
У меня есть странная проблема, мне нужно проанализировать строку даты, которая выглядит как 1997-02-14T00:00:00.0000000+05:30
. Странная вещь о строке даты - это информация о часовом поясе. Это +05:30
вместо обычного +0530
.
У меня есть строка основного формата, yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ
, которая работала бы как шарм, если бы не информация TZ.
Может ли кто-нибудь предложить решение этой проблемы? Есть ли какая-то форматная строка, которая может обрабатывать такую информацию TZ?
Спасибо заранее.
Не можете ли вы предварительно обработать регулярное выражение и заменить часовой пояс, например.
String dateAndTime = ...
String preprocessed = dateAndTime.replace("([+-])(\\d\\d):(\\d\\d)$", "$1$2$3");
// Go on with your life
Я рассмотрел эту проблему самостоятельно несколько месяцев назад. Если я правильно помню, SimpleDateFormat недостаточно гибкий, чтобы принимать другие форматы часовых поясов (мой был +530). То, что я сделал, было простым шагом предварительной обработки - т.е. Попытаться удалить двоеточие перед передачей String в SimpleDateFormat.
SimpleDateFormat должен принять это. Из документ:
Для синтаксического анализа общие часовые пояса также принимается.
и эти указаны как:
GMTOffsetTimeZone:
GMT Sign Hours : Minutes
который выглядит так, как вы?
Если это не удастся, тогда Joda DateTimeFormat утверждает, что это нужно. У меня возникнет соблазн использовать Joda независимо от целого ряда причин (более последовательный и простой API, безопасность потоков для форматировщиков/парсеров и т.д.).
Это случайная строка даты, которая поступает из XML файла (формат ISO8601)? К сожалению, нет (простого) способа проанализировать это с помощью SimpleDateFormat
, в точности из-за ":" в части часового пояса, в которой SimpleDateFormat
не имеет никакого способа справиться правильно.
Посмотрите мой ответ в этом другом вопросе о том, как разбирать строки XML datetime.
Конечно, всегда есть взлома предварительной обработки вашей строки.
Если никто не найдет лучшего ответа, это уже будет что-то. Вы можете инкапсулировать его в методе с комментарием, чтобы объяснить хак.
Он по-прежнему груб по краям, но должен работать:
Я думаю, что он должен использовать метод replaceAll
для String
для regular expression
.
String dateAndTime = ...
String preprocessed = dateAndTime.replaceAll("(GMT)([+-])(\\d\\d):(\\d\\d)", "$2$3$4");