java/oracle日期处理
从sqlserver转移到oracle时间默认格式不存在,哎,晕死了!
后来看到csdn友博客,太好了,看看一个测试类吧!
public class Test{ public static void main (String args []){ java.util.Date a = new java.util.Date(); System.out.println(a); java.sql.Date b = new java.sql.Date(a.getTime()); System.out.println(b); java.sql.Time c = new java.sql.Time(a.getTime()); System.out.println(c); java.sql.Timestamp d=new java.sql.Timestamp(a.getTime()); System.out.println(d); } }
MonApr0318:00:34CST2006
2006-04-03
18:00:34
2006-04-0318:00:34.388
1.oracle默认的系统时间就是sysdate函数,储存的数据形如25-3-200510:55:33
2.java中取时间的对象是java.util.Date。
3.oracle中对应的时间对象是java.util.Date,java.sql.Time,java.sql.Timestamp、它们都是是java.util.Date的子类。
4.oracle中与date操作关系最大的就是两个转换函数:to_date(),to_char()。to_date()一般用于写入日期到数据库时用到的函数。to_char()一般用于从数据库读入日期时用到的函数。
DATE、TIME和TIMESTAMP:
SQL定义了三种与时间有关的数据类型:DATE由日、月和年组成。TIME由小时、分钟和秒组成。TIMESTAMP将DATE和TIME结合起来,并添加了纳秒域。
标准Java类java.util.Date可提供日期和时间信息。但由于该类包含DATE和TIME信息而没有TIMESTAMP所需的纳秒,因此并不与上述三种SQL类型完全相配。
因此我们定义了java.util.Date的三种子类。它们是:
1.有关SQLDATE信息的java.sql.Date
2.有关SQLTIME信息的java.sql.Time
3.有关SQLTIMESTAMP信息的java.sql.Timestamp
对于java.sql.Time,java.util.Time基本类的小时、分钟、秒和毫秒域被设置为零。对于java.sql.Date,java.util.Date基本类的年、月和日域被分别设置为1970年1月1日。这是在Java新纪元中的“零”日期。java.sql.date中的日期可以和标准的SQL语句中含有日期的字段进行比较.java.sql.Timestamp类通过添加纳秒域来扩展java.util.Date。
oracle中两个转换函数:
1.to_date()作用将字符类型按一定格式转化为日期类型:
具体用法:to_date(''2004-11-27'',''yyyy-mm-dd''),前者为字符串,后者为转换日期格式,注意,前后两者要以一对应。如;to_date(''2004-11-2713:34:43'',''yyyy-mm-ddhh24:mi:ss'')将得到具体的时间。
2.to_char():将日期转按一定格式换成字符类型:
具体用法:to_char(sysdate,''yyyy-mm-ddhh24:mi:ss'')
to_date()与24小时制表示法及mm分钟的显示:
在使用Oracle的to_date函数来做日期转换时,很多Java程序员也许会直接的采用“yyyy-MM-ddHH:mm:ss”的格式作为格式进行转换,但是在Oracle中会引起错误:“ORA01810格式代码出现两次”。
如:selectto_date('2005-01-0113:14:20','yyyy-MM-ddHH24:mm:ss')fromdual;
原因是SQL中不区分大小写,MM和mm被认为是相同的格式代码,所以Oracle的SQL采用了mi代替分钟。oracle默认的系统时间就是sysdate函数,储存的数据形如2005-3-2510:55:33,java中取时间的对象是java.util.Date。
selectto_date('2005-01-0113:14:20','yyyy-MM-ddHH24:mi:ss')fromdual
在java对oracle的操作中,对日期字段操作的例子:
表book中有namevarchar2(20)//书籍名称,buydateDate//购买日期两个字段。
已经创建了数据库连接Connectionconn;
方法一、使用java.sql.Date实现比较简单的yyyy-mm-dd格式日期。java.sql.Date不支持时间格式。切记不要使用newjava.sql.Date(intyear,intmonth,intdate),因为还要处理时间差问题。
PreparedStatement pstmt = conn.prepareStatement("insert into book (name,buydate) values (?,?)"); java.sql.Date buydate=java.sql.Date.valueOf("2005-06-08"); pstmt.setString(1, "Java编程思想"); pstmt.setDate(2,buydate ); pstmt.execute();
方法二、使用java.sql.Timestamp,同上不使用newTimestamp(....)
PreparedStatement pstmt = conn.prepareStatement("insert into book (name,buydate) values (?,?)"); java.sql.Timestamp buydate=java.sql.Timestamp.valueOf("2004-06-08 05:33:99"); pstmt.setString(1, "Java编程思想"); pstmt.setTimestamp(2,buydate ); pstmt.execute();
方法三、使用oracle的to_date内置函数
PreparedStatement pstmt = conn.prepareStatement("insert into book (name,buydate) values (?,to_date(?, 'yyyy-mm-dd hh24:mi:ss')"); String buydate="2004-06-08 05:33:99"; pstmt.setString(1, "Java编程思想"); pstmt.setString(2,buydate ); pstmt.execute();附:oracle日期格式参数含义说明
d:一周中的星期几
day:天的名字,使用空格填充到9个字符
dd:月中的第几天
ddd:年中的第几天
dy:天的简写名
iw:ISO标准的年中的第几周
iyyy:ISO标准的四位年份
yyyy:四位年份
yyy,yy,y:年份的最后三位,两位,一位
hh:小时,按12小时计
hh24:小时,按24小时计
mi:分
ss:秒
mm:月
mon:月份的简写
month:月份的全名
w:该月的第几个星期
ww:年中的第几个星期