Java - преобразование строки, соответствующей формату xs: date, в формат отметки времени Oracle - PullRequest
2 голосов
/ 09 августа 2011

Здравствуйте и спасибо за чтение.

В настоящее время я сталкиваюсь с проблемой преобразования строки, представляющей дату / время в формате xs: date, в отметку времени Oracle.

строка, с которой я начинаю, выглядит так: «2011-07-12T16: 20: 02-04: 00»

Мне нужно, чтобы смещение часового пояса было включено в мою метку времени Oracle.После того, как процесс преобразования состоялся, я должен получить метку времени, которая выглядит как -

"2011-07-12 12: 20: 02.0000"

Обратите внимание, что в приведенном выше примересмещение часового пояса было учтено в метке времени.

Кто-нибудь знает, как этого добиться?Я попытался использовать объект SimpleDateFormat, чтобы сначала создать объект java.util.Date из строки, а затем преобразовать его в объект java.sql.Timestamp.Проблема здесь в том, что часовой пояс не учитывается, и я думаю, что объекты java.util.Date игнорируют смещения часового пояса независимо от того.

Надеюсь, что кто-то может помочь мне здесь ...

Редактировать: Решено - Вот код, который я использовал в итоге -

Calendar Cal = DatatypeConverter.parseDateTime("2011-07-12T16:20:02+02:00");
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
        df.setTimeZone(TimeZone.getTimeZone("GMT"));
        System.out.println(df.format(Cal.getTime()));

Еще раз спасибо за чтение,

Захари Картер

Ответы [ 2 ]

2 голосов
/ 09 августа 2011

DateFormats имеют часовые пояса.в основном вам нужно настроить SimpleDateFormat с правильным форматом для анализа входной метки времени (см. примечание ниже).технически он включает информацию о часовом поясе, поэтому не имеет значения, какой часовой пояс вы настраиваете во входном форматере (вы можете использовать «GMT» просто для безопасности).затем создается впечатление, что вы хотите вывести временную метку с использованием часового пояса GMT (например, без смещения часового пояса), поэтому вы можете создать еще один SimpleDateFormat с желаемым форматом вывода, настроенный с помощью TimeZone «GMT».

SimpleDateFormatможет быть не в состоянии обработать формат ввода xsd, поэтому вы можете использовать утилиты jaxb, чтобы обработать это для вас, см .: http://download.oracle.com/javase/6/docs/api/javax/xml/bind/DatatypeConverter.html#parseDateTime(java.lang.String)

1 голос
/ 09 августа 2011

SimpleDateFormat учитывает часовой пояс, если вы используете правильный формат.Попробуйте запустить этот код и посмотрите результат:

    String s = "2011-07-12T16:20:02-0400";
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
    sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
    System.out.println(sdf.format(sdf.parse(s)));

Просто убедитесь, что конвертированы -04: 00 в -0400.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...