другой формат даты в Java после извлечения из оракула - PullRequest
0 голосов
/ 27 февраля 2012

В моем БД max date is as : 27-FEB-12

когда я получаю данные по Java из БД, то есть:

select to_char(max(CREATE_DT),'dd-mm-yyyy') from PROFILE_DETAILS;

дает мне 2012-02-27 00:00:00.0

Как я могу преобразовать его в: 27-FEB-12 (я пытаюсь использовать индийский формат даты)

Любая идея, пожалуйста

Ответы [ 4 ]

5 голосов
/ 27 февраля 2012

Я не знаю, зачем вам нужна функция to_char в вашем запросе.Если вы извлекаете данные с помощью jdbc, oracle может предоставить вам объект Date.В вашем случае в будущем будет гораздо проще конвертировать в другой формат (String).

в любом случае, исходя из ваших текущих требований, с to_char вы получите String 2012-02-27 00:00:00.0.теперь вы хотите получить еще одну строку 27-FEB-12.Вы могли бы сделать что-то вроде ниже (обработка исключений была опущена):

final String s = "2012-02-27 00:00:00.0";
String newDateString = new SimpleDateFormat("dd-MMM-yy").format(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").parse(s));

это даст вам 27 февраля-12

1 голос
/ 27 февраля 2012
        String strDate = "2012-02-27 00:00:00.0";
        String TimeZoneIds = TimeZone.getDefault().getID();


        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.S");
        SimpleDateFormat sdf2 = new SimpleDateFormat("dd-MMM-yyyy");
        sdf2.setTimeZone(TimeZone.getTimeZone(TimeZoneIds));

        try {
            Date date = sdf1.parse(strDate);
            String strFinalDate = sdf2.format(date);

            System.out.println(strFinalDate);

        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
1 голос
/ 27 февраля 2012

В столбце Oracle DATE нет формата; строковое представление, которое вы видите, когда вы, скажем, select max(create_dt)) from profile_details в SQL * Plus используете неявную маску формата из ваших настроек NLS, которая в этом клиенте выглядит как DD-MON-RR.

Ваш JDBC-вызов применяет явную маску формата, что является правильным решением , если вы хотите, чтобы Java воспринимала его как String , не в последнюю очередь потому, что он может иметь различные настройки NLS. Но ваша маска не соответствует тому, что вы говорите, что хотите; вы указываете DD-MM-YYYY, когда хотите DD-MON-RR.

Но похоже, что вы, вероятно, получаете значение из вызова JDBC с помощью вызова getDate(), и оно неявно приводится к типу объекта Java Date. Если вы хотите трактовать его как дату в Java, вам не нужно to_char в вашем выборе, и вам нужно использовать инструменты Java (например, SimpleDateFormat, как предлагает @Andrew Logvinov), чтобы превратить его в строку по мере необходимости. Если вы когда-либо рассматривали его как строку - скажем, для немедленного отображения, - вместо этого используйте getString() и исправьте маску формата даты в запросе.

Редактировать

Если вы извлекаете значение из JDBC с помощью getDate() и хотите видеть значение в виде строки в указанном вами формате, вам нужно сделать что-то вроде:

Date raw_date;
String string_date;
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yy");
raw_date = <resultSet>.getDate(1);
string_date = sdf.format(raw_date);
0 голосов
/ 27 февраля 2012
select to_char(max(CREATE_DT),'dd-MON-yy') from PROFILE_DETAILS;
...