还是关于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;
}

}
...全文
858 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)
​ 博主介绍:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌项目名称基于Web的酒店客房管理系统的设计与实现系统说明3.2.1  用户模块功能分析前台模块应主要包括用户登录模块、用户注册模块、查看客房信息模块、客房预定 模块、用户留言模块、充值模块和个人信息维护模块。用户登录模块:用户通过输入注册的的账号和密码,然后进行身份验证,匹配成功 后实现登录功能。用户注册模块:用户输入合法的账号和密码可以实现注册功能。 查看客房信息模块:用户可以通过首页查看客房的价格,图片,详情等信息,从而   可以选择想要预定的房间。 客房预定模块:用户选择自己想要预定的客房后,可以通过输入相关信息进行订房操作。用户留言模块:用户可以向管理员发送留言。 充值模块:用户可以通过添加银行卡再为自己进行充值操作。 个人信息维护模块:用户可以修改自己的姓名、密码、身份证号等信息,还可以查看自己的订单。3.2.2  管理员模块功能分析对于管理员而言,一个好的管理系统总是能让酒店的管理工作事半功倍[7]。管理员 能够通过这个系统对自己的酒店情况一目了然,应该包括客户留言模块、客房管理模 块、订房信息管理模块、入住信息管理模块、统计分析模块、酒店新闻管理模块、会 员信息管理模块、员工信息管理模块、系统用户管理模块、个人信息维护模块。客户留言模块:管理员可以查看并回复用户的留言。客房管理模块:管理员可以管理客房信息,可以添加新的客房,删除已经停用的客房信息,还可以修改现有的客房信息。订房信息管理模块:管理员可以处理用户的订房请求,为用户办理入住手续。入住信息管理模块:对于没有注册的线下客户,也可以办理入住手续。统计分析模块:可以对酒店所有的入住信息进行记录和总结分析。酒店新闻管理模块:管理员可以更新网站上的新闻公告,展示图片等信息。会员信息管理模块:管理员可以查看到所有的注册会员信息,可以对会员信息进行删除,修改,添加操作。员工信息管理模块:管理员可以查看到自己公司所有的员工信息,而且还可以对员工的相关信息进行管理。系统用户管理模块:管理员可以查看到所有的系统管理员信息并对管理员信息进行管理。个人信息维护模块:管理员可以更改自己的登录密码或者是姓名、性别、手机号等 相关个人信息。​编辑 环境需要1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS; 5.数据库:MySql 5.7版本;6.是否Maven项目:否;技术栈1. 后端:Spring+SpringMVC+Mybatis2. 前端:JSP+CSS+JavaScript+jQuery使用说明1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行;3. 将项目中springmvc-servlet.xml配置文件中的数据库配置改为自己的配置;4. 运行项目,在浏览器中输入http://localhost:8080/ 登录运行截图​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑 用户管理控制层:package com.houserss.controller;import javax.servlet.http.HttpSession;import org.apache.commons.lang3.StringUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import com.houserss.common.Const;import com.houserss.common.Const.Role;import com.houserss.common.ServerResponse;import com.houserss.pojo.User;import com.houserss.service.IUserService;import com.houserss.service.impl.UserServiceImpl;import com.houserss.util.MD5Util;import com.houserss.util.TimeUtils;import com.houserss.vo.DeleteHouseVo;import com.houserss.vo.PageInfoVo;/** * Created by admin */@Controller@RequestMapping(/user/)public class UserController if (ip != null && ip.length() > 0) String[] ips = ip.split(,);for (int i = 0; i  

62,614

社区成员

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

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