{
PreparedStatement stm=con.prepareStatement("insert into message values(?,?,?,?,?)");
stm.setString(1,trans(msg.getTitle()));
stm.setString(2,trans(msg.getName()));
stm.setDate(3,new java.sql.Date(new java.util.Date().getTime()));
if((msg.getEmail()).length()==0)
stm.setString(5,null);
else stm.setString(5,trans(msg.getEmail()));
stm.setString(4,trans(msg.getContent()));
加粗的语句设置当前时间存入数据库,但数据库里是(10-七月 -2008 12:00:00 AM)这样,年月日是对的,但时间不对,jsp读出的 时间是2008-7-10 0:00:00 ,如何解决,谢谢!
PreparedStatement stm=con.prepareStatement("insert into message values(?,?,?,?,?)");
stm.setString(1,trans(msg.getTitle()));
stm.setString(2,trans(msg.getName()));
stm.setDate(3,new java.sql.Date(new java.util.Date().getTime()));
if((msg.getEmail()).length()==0)
stm.setString(5,null);
else stm.setString(5,trans(msg.getEmail()));
stm.setString(4,trans(msg.getContent()));
加粗的语句设置当前时间存入数据库,但数据库里是(10-七月 -2008 12:00:00 AM)这样,年月日是对的,但时间不对,jsp读出的 时间是2008-7-10 0:00:00 ,如何解决,谢谢!
楼主【zhizhuo89】截止到2008-07-11 09:55:30的历史汇总数据(不包括此帖):
发帖的总数量:12 发帖的总分数:180 每贴平均分数:15
回帖的总数量:14 得分贴总数量:1 回帖的得分率:7%
结贴的总数量:10 结贴的总分数:140
无满意结贴数:3 无满意结贴分:60
未结的帖子数:2 未结的总分数:40
结贴的百分比:83.33 % 结分的百分比:77.78 %
无满意结贴率:30.00 % 无满意结分率:42.86 %
楼主加油
上述为建表的语句。
楼上的说的我还是不明白。
java.sql.Date 为了与 SQL DATE 的定义一致,由 java.sql.Date 实例包装的毫秒值必须通过将时间、分钟、秒和毫秒设置为与该实例相关的特定时区中的零来“规范化”。 就说他的分钟,秒全部处理成0了,当然不对了。即使你要用应该用 java.sql.Time。
你先就得到的时间formate下.
PreparedStatement stm=con.prepareStatement("insert into message values(?,?,sysdate,?,?)");
stm.setString(1,trans(msg.getTitle()));
stm.setString(2,trans(msg.getName()));
//stm.setDate(3,new java.sql.Date(new java.util.Date().getTime()));
if((msg.getEmail()).length()==0)
stm.setString(4,null);
else stm.setString(4,trans(msg.getEmail()));
stm.setString(3,trans(msg.getContent())); 看见没有,第三个参数我使用sysdate,这个会自动返回数据库的本地时间,很方便。
create table message(title varchar(100),name varchar(20),time date ,content varchar(2000),mail varchar(50));
SQL> select sysTimestamp from dual; SYSTIMESTAMP //当前系统时间
-----------------------------------------
11-7月 -08 11.05.56.593000 上午 +08:00 语句如下:
{
PreparedStatement stm=con.prepareStatement("insert into message values(?,?,?,?,?)");
stm.setString(1,trans(msg.getTitle()));
stm.setString(2,trans(msg.getName()));
stm.setTimestamp(3,new Timestamp(new java.util.Date().getTime())); …
jsp添加到数据库的表里显示而为11-七月 -2008 03:03:48 AM (两个时分秒不统一)
请高手指教!
首先要确认oralce的数据类型是DATE型1.如果要插入的时间是DB服务器的系统时间,那么很简单,第三个参数不需要写?来set,直接用sysdate这个oracle自带的函数就可以(补充一点,你另外一个帖子写的getDate函数是SQL Server的,不是oracle的)PreparedStatement stm=con.prepareStatement("insert into message values(?,?,sysdate,?,?)");这样写就可以在DATE型插入当前DB服务器的时间。2.如果需要插入的是WEB服务器的时间,那么首先你要知道你的这些代码是运行在WEB服务器上的,new Date()的时候,取得的是当前WEB服务器的时间。
然后要知道的是你用的PreparedStatement是一个接口,PreparedStatement.setDate()这个方法由Oracle厂家实现,setDate()插入数据库的只是年月日,无视了时分秒,要包含时分秒的话,用PreparedStatement.setTimestamp(3,new java.sql.Timestamp(System.currentTimeMillis()));System.currentTimeMillis()和new java.util.Date().getTime()是一样的,都是运行这段代码的WEB服务器的时间。btw:关于PreparedStatement接口的实现,如果你想知道更多的话,用winrar或者zip打开oracle目录的oracle\ora92\jdbc\lib\ojdbc14.jar这个文件,可以看到里面的class结构,安装DJ Java Decompiler反编译工具可以看到具体代码。另外,你16楼所说的两个时间不一致的问题,一个原因明显是第一个时间是DB服务器的,第二个是WEB服务器的,还有一个时分秒不统一的原因应该是两台机器的时区设定问题,小时刚好差8,这个可以具体调查。
你们说的很明白,我还是很疑惑。
我现在把数据库的date类型改成String,建表语句如下:create table message(title varchar(100),name varchar(20),time varchar(50),content varchar(2000),mail varchar(50));
写入数据库java:
{
java.util.Date date=new java.util.Date();
String datetime=new Timestamp(date.getTime()).toString(); //当前的web时间转换为String
PreparedStatement stm=con.prepareStatement("insert into message values(?,?,?,?,?)");
stm.setString(1,trans(msg.getTitle()));
stm.setString(2,trans(msg.getName()));
stm.setString(3,datetime);
………………
这样的语句插入数据库表里显示的时间与当前系统(new java.util.Date())时间差8小时,另外,new java.util.Date()得到的时间,与我电脑上的时间不一致,原因?如何修改?
对了,使用的平台是oracle9i+Tomcat5.5+jdk1.5
new java.util.Date()得到的时间,与我电脑上的时间不一致是差8小时么,是的话应该是时区问题,双击你右下角时间确认一下时区是GMT+8
还有System.out.println(TimeZone.getDefault().getDisplayName()); 确认跟系统一致
或者baidu一下"java 时区"
2.System.out.println(TimeZone.getDefault().getDisplayName());
在jdk输出的是“格林威治时间”。
是时间格式不一样,如何统一,如何baidu一下"java 时区" ?
麻烦那么多,真不好意思。
at time zone 'GMT'
from dual;
06-APR-03 08.59.59.00000000 AM GMT
这个语句将为太平洋白天时间(即其切换到PST之前的时刻)构造一个TIMESTAMP WITH TIME ZONE然后再将其转换到GMT.AT TIME ZONE关键字也接受默认的偏移值语法:select (timestamp '2003-04-06 02:00:00'
at time zone '-07:00') at time zone
'00:00' from dual;
06-APR-03 09.00.00.000000000 AM +00:00
你还可以使用伪字段来自动调整当前会话的时区: selectcurrent_timestamp at time zone dbtimezone from dual; 上面的表达式返回一个当前会话的本地时间(数据类型为时区),重新调整数据库的时区,调整后的时区将与SYSTIMESTAMP的结果相等。 有了以上的这些信息,就可以构造一个比较好的NEW_TIME函数:create or replace function my_new_time
(
p_dwtz timestamp with time zone,
p_tz varchar2
) return date
is
begin
return cast(p_dwtz at time zone p_tz as date);
end my_new_time;
/
show errors;
select my_new_time(sysdate,'+08:00') from dual;
即使第一个参数被标记为一个timestamp with time zone,你依然可以传入一个TIMESTAMP和DATE,这样由于Oracle的自动转型操作,得到的时间将是会话在本地时区的当前时间。这个函数接受包括偏移值在内的任何可以被TIMESTAMP识别的时区,然后将接受的时区调整为正确的值。不明白?
问题描述:Window XP 系统自己能够读取正确的时间,但是用java获取的时间始终与北京时间相差八个小时。
原因分析:
1.系统本身时区设置错误(可以排除,上面已经交代系统能够获取正确时间)
2.注册表出现异常。
注册表对应项:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones
解决之道:
1.备份Time Zones这一项
2.从正常的并且是相同系统的机器中导出该项,然后倒入到自己机器中 我用第二种办法,搞定!!但不知道对以后有什么影响!!谢谢各位。买单!