还是关于String 转化成java.sql.Date 的问题,急求解

endlessachingneed 2003-10-17 09:54:53
我也碰上相同的问题。由于数据库的关系,我必须把String ‘31/10/2002’‘09:03:00'转成java.sql.Date 'dd/MM/yyyy' 'HH:MM:ss'的格式,我试过很多方法都不行,请大家帮我看看。我已经卡在这好几天了

程序一,可以运行,但输出的结果格式还是不对

public class DateParser1{

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");


public java.util.Date stringToDate(String str){
try{
return sdf.parse(str);
}catch(Exception e){
e.printStackTrace();
return null;
}
}


public static void main(String[] args){
DateParser1 dp = new DateParser1();

String sss = "97/04/17";

System.out.println("the date is:"+dp.stringToDate(sss));

}

程序2,DateParser1.java:12: incompatible types
found : java.util.Date
required: java.sql.Date
java.sql.Date date = new Date(ca.getTimeInMillis());

public static void main(String[] args){
SimpleDateFormat format = new SimpleDateFormat("yy/MM/dd");
try{
Calendar ca = Calendar.getInstance();
ca.setTime(format.parse("94/07/17"));
java.sql.Date date = new Date(ca.getTimeInMillis());
System.out.println(date.toString());
}catch(Exception e){}
}

程序3 运行时报错Exception in thread "main" java.lang.IllegalArgumentException
at java.sql.Date.valueOf(Date.java:100)
at ex1.main(ex1.java:27)

public class ex3{

public static void main(String[] args) {

String date = "31/10/2002";
java.sql.Date dd=java.sql.Date.valueOf(date);

}
}


程序4 输出
str is 31/10/2002
null

没有输出 no value 说明没有执行if内的语句,但是结果还是null,
java.sql.Date.valueOf(str);没有起作用


public class ex3{

public static void main(String[] args) {

String datetime = "31/10/2002";

java.sql.Date dd = StrtoDate(datetime);

System.out.println(dd);
}


public static java.sql.Date StrtoDate(String str)
{
try{

System.out.println("str is "+str);
if (str.equals("")){
System.out.println("no value");
return null;
}
return java.sql.Date.valueOf(str);
}
catch (Exception e){
return null;
}

}
...全文
852 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
endlessachingneed 2003-10-22
  • 打赏
  • 举报
回复
多谢
fft123() 你给的方法可以执行,很方便,不胜感激
endlessachingneed 2003-10-21
  • 打赏
  • 举报
回复
fft123()

不是,数据库用的是Date/Time型

是Micro Access 的数据库
leotonny 2003-10-21
  • 打赏
  • 举报
回复
插入数据库时用SimpleDateFormat类的parse方法没错

但插入后就是java.sql.Date格式的了,直接打印肯定是按照默认格式,如果需要按照自己的格式可以调用SimpleDateFormat类的format方法

当用户选择好日期时间后,可以先组合出一个字符串dateStr,格式可以为“yyyy-MM-dd HH:mm:ss”,然后在sql语句中调用to_days(time) <= to_days(dateStr)就可以进行日期比较了(to_days仅对mysql数据库有效,其他数据库可能会有不同)
fft123 2003-10-21
  • 打赏
  • 举报
回复
数据库里存的是java.sql.Date格式的还是String格式的?
>数据库里的是dd/MM/yyyy的格式
感觉你好像存的是String类型的
endlessachingneed 2003-10-21
  • 打赏
  • 举报
回复
不是比较,而是SELECT的条件,程序就是USER选则一个日期和时间,然后在根据选的内容从数据库里把信息提出来
数据库里的是dd/MM/yyyy的格式

这样要怎么办啊
fft123 2003-10-21
  • 打赏
  • 举报
回复
你是不是要用dd/MM/yyyy的字符串格式表示的日期和数据库里用java.sql.Date存的日期来比较??
如果都是日期类型,那没办法了,数据库里存的日期类型都是按java规定的格式来存放的,如java.sql.Date格式就是yyyy-MM-dd,java.util.Date就是dow mon dd hh:mm:ss zzz yyyy格式。
要不你比较的时候,把查询条件中日期格式转成你数据库的格式吧
就是把dd/MM/yyyy格式的日期换成yyyy-MM-dd格式的,然后再和数据库里的比较
endlessachingneed 2003-10-21
  • 打赏
  • 举报
回复
fft123()
谢谢,不过这样出来的的确是java.sql.Date,但是格式是yyyy-MM-dd

报错是 Data type missmatch incriteria expression
但是数据库的格式一定要是dd/MM/yyyy, 应该怎么改啊
fft123 2003-10-21
  • 打赏
  • 举报
回复
假设你已经将一个String转换成java.util.Date了
我这里用一个新的Date来代替
java.util.Date d1 = new java.util.Date();//这里换成你的Date
long l = d1.getTime();
java.sql.Date s1 = new java.sql.Date(l);//利用已有的java.util.Date来生成相应时间的java.sql.Date的实例,放到数据库中


java.util.Calendar c = java.util.Calendar.getInstance();
c.setTime(s1);//从数据库中取出来的格式是java.sql.Date,转换成Calendar

int year = c.get(c.YEAR);//取Calendar实例的各个Field的值
int month = c.get(c.MONTH)+1;//月份要加1,这是Calendar设计的毛病
int day = c.get(c.DATE);
int hour = c.get(c.HOUR);
int minute = c.get(c.MINUTE);
int second = c.get(c.SECOND);
System.out.println(""+year+"/"+month+"/"+day+" "+hour+":"+minute+":"+second);//拼成你想要的字符串
endlessachingneed 2003-10-21
  • 打赏
  • 举报
回复
因为数据库的格式是一定不能改的,一定要是java.sql.Date “dd/MM/yyyy”"HH:mm:ss"

而且是用在SELECT的条件里面,要选出固定时间某时段内的数据,所以不管是类型还是格式都必须一致

因为用的是ACCESS的数据库所以TO_DATE是不能用的。
我现在也就是能把String 转化成java.util.Date, 但这样格式差很多,而且怎么能在转化成java.sql.Date呢


能不能再给我讲讲
fft123 2003-10-21
  • 打赏
  • 举报
回复
tmd access太恶心了
自己定义的一套语法规范,我试了半天才试出来时间怎么匹配
你照下面的做吧,不用转来转去的

我做测试的access数据库里,Date/Time类型存的日期格式是:2003-8-1 11:39:28
(access我几乎不用,不知道你怎么存成dd/MM/yyyy格式的,总之按照数据库里的格式组合你的查询字符串就是了)
根据你的用户选择的时间,把它拼成一个字符串,格式为"yyyy-MM-dd"
sql语句这样写:
String sql = "select * from Table where YourDate between #2003-08-01 00:00:00# and #2003-08-03 23:59:59#";
//数据库里存的有秒,所以用between判断。后面的秒自己加。日期两边要加#,否则老是报参数不足。我这边调试已经通过了
whywzf 2003-10-20
  • 打赏
  • 举报
回复
在出入数据库的时候这样呢? ……TO_DATE('2003-10-20 09:30:00','yyyy-mm-dd hh:ms:ss')…… 我不知道有没有31/10/2003的格式,参考
whywzf 2003-10-20
  • 打赏
  • 举报
回复
进的时候TO_DATE,出的时候TO_CHAR是可以的,我是这么做的。楼主你的?具体的拿来看看
fft123 2003-10-20
  • 打赏
  • 举报
回复
to_date是oracle的函数

不太清楚楼主到底是什么意思
是需要把String ‘31/10/2002’‘09:03:00'按'dd/MM/yyyy' 'HH:MM:ss'的格式存进数据库?还是必须存一个Date类型的值进数据库?

如果你往数据库里存的是Date类型的话(不管是java.util.Date还是java.sql.Date),取出来都是Date类型的对象,直接调用该对象的toString时,都是按相应Date类的toString方法所设定的格式来输出的String(java.util.Date输出的是dow mon dd hh:mm:ss zzz yyyy格式的,java.sql.Date和这个不一样),这个格式的String不是你想要的格式,因此必须自己转换。一般的转换就是利用这个Date的对象来生成Calendar,然后用该Calendar对象的get方法取得相应年月日时分秒,然后自己拼字符串。Date类的getYear()等方法已经相应被Calendar.get(Calendar.YEAR)方法取代,不推荐使用了。

如果数据库设计可以变更的话,像你这种情况最好把Date字段改成String类型的,
这样转换也方便。如果数据库不能改,还需要特定格式输出,就只能先取得Date对象,然后生成Calendar,取相应字段值,字符串相加这样来做了
endlessachingneed 2003-10-20
  • 打赏
  • 举报
回复
我也有试过这个

可是很奇怪的就是会报错说TO_DATE这个METHOD没有定义过
endlessachingneed 2003-10-19
  • 打赏
  • 举报
回复
楼上的方法也不行,这样出来的数据还是String

timeto="09:03:00";
java.sql.Date time=dp.stringToTime(timeto);


dda.java:32: incompatible types
found : java.lang.String
required: java.sql.Date
java.sql.Date time=dp.stringToTime(timeto);
endlessachingneed 2003-10-18
  • 打赏
  • 举报
回复
是的,因为是用在SELECT的条件里所以格式一定要完全一致。我的字母没有用错


但是程序一的结果是the date is:Thu Oct 31 00:00:00 EET 2002

怎么能只输出 31/10/2002呢

我给的格式是这样的啊
eshen2002 2003-10-18
  • 打赏
  • 举报
回复
public class DateParser1{

java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("dd/MM/yyyy");


public String stringToDate(String str){
try{
return sdf.format(sdf.parse(str));
}catch(Exception e){
e.printStackTrace();
return null;
}
}


public static void main(String[] args){
DateParser1 dp = new DateParser1();

String sss = "31/10/2003";

System.out.println("the date is:"+dp.stringToDate(sss));
}
}
eshen2002 2003-10-18
  • 打赏
  • 举报
回复
写到数据库里2003-10-18也可以的呀。我现在也是这样用的,select也可以呀.

java.util.Calendar cal = java.util.Calendar.getInstance();
System.out.println("curTime ="+java.text.DateFormat.getDateInstance().format(cal.getTime()));
顺手写的,给你参考一下。
endlessachingneed 2003-10-18
  • 打赏
  • 举报
回复
up
liad 2003-10-17
  • 打赏
  • 举报
回复
Letter Date or Time Component
G Era designator
y Year
M Month in year
w Week in year
W Week in month
D Day in year
d Day in month
F Day of week in month
E Day in week
a Am/pm marker
H Hour in day (0-23)
k Hour in day (1-24)
K Hour in am/pm (0-11)
h Hour in am/pm (1-12)
m Minute in hour
s Second in minute
S Millisecond
z Time zone
Z Time zone

是没有注意字母大小写的原因吗?
加载更多回复(1)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧