如何在java中以yyyyMMddHHmm格式接收输入?
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:不是有效月份。
任何人都可以协助解决上述错误吗?
在java中,要获得格式化日期,您可以执行以下操作:
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmm"); String sdf.format(myDate);
SimpleDateFormat中有很多选项。 我已经为您附加了JavaDoc。
您从字符串到时间戳的转换是可以的。(我测试并且工作)。
你的问题可能在时区或某事。 尝试使用此方法,
setTimestamp(int parameterIndex, Timestamp x, Calendar cal)
例:
setTimestamp(1, timestamp , Calendar.getInstance(TimeZone.getTimeZone("UTC")))
更新:( table1.table_key是一个CHAR(24))
假设key_value的格式为“yyyyMMddhhmm”,你应该给你一个字符串中java的日期…(由于显而易见的原因,其他格式不起作用)
其他选项在您的查询中将key_value转换为TIMESTAMP
尝试:(我假设你正在使用oracle db,我做了一些搜索)
1)对时间戳进行“强制转换”
“select count(*)作为table1的计数器,其中timestamp(table_key)>?”
2)使用http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions193.htm 。 我不知道你是否可以这样做:
“select count(*)作为来自table1的计数器,其中TO_TIMESTAMP(table_key,’YYYYMMDDHHMMHH24MI’)>?”
我已经解决了上述问题。
我将日期转换为“yyyyMMdd”格式并将时间转换为“HHmm”格式,将它们存储为2个不同的字符串。