Как получить вход в формате yyyyMMddHHmm в Java?

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmm");
java.util.Date parsedDate = sdf.parse("201212130900");
java.sql.Timestamp timestamp = new java.sql.Timestamp(parsedDate.getTime());
try
{
  PreparedStatement pstmt = connection.prepareStatement(
    "select count(*) as counter from table1 where table_key > ?");
  pstmt.setTimestamp(1,new java.sql.Timestamp(timestamp.getTime()));  
  ResultSet rs = pstmt.executeQuery();  
  while(rs.next()){
    System.out.println(rs.getInt( 1 ));
  }
  connection.close();
}
catch(Exception g){
  System.err.println(g.getMessage());
}

В выводе я получаю ошибку как

ORA-01843: недействительный месяц.

Кто-нибудь может помочь решить вышеуказанную ошибку?

 Yogendra Singh13 дек. 2012 г., 22:12
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmm"); java.util.Date parsedDate = sdf.parse("201212130900"); java.sql.Timestamp timestamp = new java.sql.Timestamp(parsedDate.getTime()); System.out.println(new java.sql.Timestamp(timestamp.getTime())); Кажется, работает нормально. Я подозреваю, что его значения в вашей базе данных вызывают проблемы.
 Prashanth K13 дек. 2012 г., 22:19
Йогендра Сингх ... с desc table1 и для table_key я вижу, что это как CHAR (24) ... так что я пытаюсь сделать с полем даты, но на самом деле он объявил CHAR в БД? больше преобразование я должен сделать?
 Aaron Kurtzhals13 дек. 2012 г., 22:08
Это может помочь, если вы опубликовали определение таблицы. Кроме того, вы можете заставить запрос работать с помощью интерактивного инструмента SQL?
 Prashanth K13 дек. 2012 г., 22:00
да ... я понял это и теперь изменил значение примера ..
 Prashanth K13 дек. 2012 г., 22:14
Аарон .. Я вижу, что table_key имеет тип CHAR
 Chris Gerken13 дек. 2012 г., 21:59
@PrashanthK Месяц тогда будет 13 (char 'с 5 & 6). Возможно, вы поменяли день и месяц?
 Prashanth K13 дек. 2012 г., 21:58
да ... значение table_key будет примерно таким201212120147693401252790" с помощью которого я вывел этот формат такГГГГММДДЧЧмм» и запросить в БД достаточно, если мы дадим table_key> 'ГГГГММДДЧЧмм» результаты будут получены.
 Gandalf13 дек. 2012 г., 21:51
Ваша колонкаtable_key» такое TIMESTAMP?

Ответы на вопрос(3)

Я решил вышеупомянутую проблему.

Я преобразовал дату в "YYyyMmDd» отформатировать и преобразовать время в "HHMM» формат, сохраняя их в виде 2 разных строк.

В Java, чтобы получить форматированную дату, вы должны сделать следующее:

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmm");
String sdf.format(myDate);

Есть множество вариантов вSimpleDateFormat, Я приложил JavaDoc для вас.

 Yogendra Singh13 дек. 2012 г., 22:13
Isn»т ОП использует то же самое?
 Prashanth K13 дек. 2012 г., 23:02
не уверен что это значитIsn»т, используя тот же " ? не могли бы вы уточнить это немного подробнее

ботает).

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

setTimestamp(int parameterIndex, Timestamp x, Calendar cal) 

Пример:

setTimestamp(1, timestamp , Calendar.getInstance(TimeZone.getTimeZone("UTC")))

ОБНОВЛЕНО: (table1.table_key - это CHAR (24))

Вы должны дать вам дату из Java в строке, предполагая, что key_value отформатирован как "ГГГГММДДЧЧмм»... (по понятным причинам другой формат не будет работать)

Другой вариант в вашем запросе конвертировать key_value в TIMESTAMP

Попробуй (Яя предполагаю, что вы работаете с oracle db, и я делаю некоторые поиски)

1) Сделай "бросать" к метке времени

выберите count (*) в качестве счетчика из таблицы1, где отметка времени (table_key)>? "

2) Использованиеhttp://docs.oracle.com/cd/B19306_01/server.102/b14200/functions193.htm , Я не знаю, можете ли вы сделать что-то вроде этого: "

выберите счетчик (*) в качестве счетчика из таблицы1, где TO_TIMESTAMP (таблица_ключ, 'ГГГГММДДЧЧММХХ24МИ ')>? "

 Prashanth K13 дек. 2012 г., 22:24
Я пытался, как это pstmt.setTimestamp (1, новый java.sql.Timestamp (timestamp.getTime ()), Calendar.getInstance (TimeZone.getTimeZone ("УНИВЕРСАЛЬНОЕ ГЛОБАЛЬНОЕ ВРЕМЯ"))); и я получил ошибку ORA-01861: литерал не соответствует строке формата. Попытался ли я правильно?
 Prashanth K14 дек. 2012 г., 00:26
nms ... не могли бы вы рассказать подробнее о том, как преобразовать строку в метку времени ... в соответствии с кодом, который я разместил выше?
 nms18 дек. 2012 г., 14:49
Я обновил свой пост с 2 примерами.
 nms14 дек. 2012 г., 00:00
Ваша проблема в том, что вы сравниваете две разные вещи ...
 nms13 дек. 2012 г., 22:49
Хорошо. Некоторые вопросы: Вы используете базу данных Oracle? Пожалуйста, обновите ваш пост, указав определение таблицы. какой часовой пояс и локаль определены в вашей базе данных? Другое дело, что вы можете просто указать в качестве параметра метку времени, которую вы создали выше.
 Prashanth K13 дек. 2012 г., 23:00
хорошо ... я очень рад получить захватывающие материалы. и table_key имеет тип CHAR (24), кроме этого, мне будет трудно разглашать какие-либо другие детали. Я хотел бы предложить обходной путь ... мы можем подойти к решению моей проблемы, считая, что БД находится в любом Страна желаний и попытаться решить это?

Ваш ответ на вопрос