java\oracle日期格式操作

先来看看Java的几个日期方法:

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);  

        }  

}  

输出结果:  

Mon Apr 03 18:00:34 CST 2006  

2006-04-03  

18:00:34  

2006-04-03 18: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.有关 SQL DATE 信息的 java.sql.Date

2.有关 SQL TIME 信息的 java.sql.Time

3.有关 SQL TIMESTAMP 信息的 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。

  

  1. 在JAVA中,有些用到的日期格式化.如

DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");   

例如:SELECT id,name,TO_CHAR(birther, 'YYYY/MM/DD hh24:mi:ss') FROM test1;

而在ORACLE中的TO_DATE函数中对应格式应该是yyyy-MM-dd hh24:mi:ss.虽然使用yyyy-MM-dd HH:mm:ss时不会发生错误,但查出的数据时不正确的。

  

  1. 要想保存时分秒要用java.sql.Timestamp;

    java.sql.Date和java.util.Date都把时分秒丢弃了.

  2. Java更新oracle中字段为Date的方法:  

SimpleDateFormat formatter = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss");   

String datetime = formatter.format(new Date());  

String sql = "UPDATE HZSW_TZGL SET PUB_RSS_TIME = to_date('" + datetime + "','[b]YYYY-MM-DD hh24:mi:ss[/b]')" ;  

  1. Java查询oracle中字段为Date的方法:

select PUB_RSS_TIME,to_char(PUB_RSS_TIME,'yyyy-mm-dd  hh24:mi:ss')  from hzsw_tzgl  

  

  1. oracle中两个转换函数:
    1. to_date() 作用将字符类型按一定格式转化为日期类型:
      1. 具体用法:to_date('2004-11-27','yyyy-mm-dd'),前者为字符串,后者为转换日期格式,注意,前后两者要以一对应。如;to_date('2004-11-27 13:34:43', 'yyyy-mm-dd hh24:mi:ss') 将得到具体的时间。
    2. to_char():将日期转按一定格式换成字符类型:
      1. 具体用法:to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),在使用to_char()将日期转换为字符时,很多Java程序员也许会直接的采用"yyyy-MM-dd HH24:mm:ss"的格式作为格式进行转换,虽然执行没有错误,但查出的数据时不正确的。

如:

select sysdate from dual;

select to_char(sysdate,'yyyy-MM-dd HH24:mm:ss') from dual;

  1. to_date()与24小时制表示法及mm分钟的显示:

    在使用Oracle的to_date函数来做日期转换时,如果采用"yyyy-MM-dd HH:mm:ss"的格式作为格式进行转换,但是在Oracle中会引起错误:"ORA 01810 格式代码出现两次"。

如:select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mm:ss') from dual;

原因是SQL中不区分大小写,MM和mm被认为是相同的格式代码,所以Oracle的SQL采用了mi代替分钟。 oracle默认的系统时间就是sysdate函数,储存的数据形如2005-3-2510:55:33,java 中取时间的对象是java.util.Date。

select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual

  

  1. 在java对oracle的操作中,对日期字段操作的例子:

表 book 中有name varchar2(20)//书籍名称,buydate Date //购买日期 两个字段。

已经创建了数据库连接Connection conn;

方法一:使用java.sql.Date实现比较简单的yyyy-mm-dd格式日期。java.sql.Date不支持时间格式。切记不要使用new java.sql.Date(int year,int month,int date),因为还要处理时间差问题。

Java代码

  • 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,同上不使用new Timestamp(....)

  • 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:年中的第几个星期

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值