如何在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个不同的字符串。