用DateFormat处理时间格式,转化为timestamp形式存入数据库(以XXXX年XX月XX日为例)

本文介绍了如何使用DateFormat将'XXXX年XX月XX日'格式的日期转换为'yyyy-MM-dd'格式,以便进一步转化为Timestamp存储到数据库中。解析过程中强调了在定义SimpleDateFormat时需确保格式与输入字符串匹配,以及Timestamp的默认存储格式。

今天遇到要用dateformat处理时间的情况,之前没有弄过,因为着急,刚开始没搞清楚原理就乱用,进入一个误区。为了让其他人不要像我一样误解这个类的用法做了个简答的总结。

要处理的问题:

我的情况是这样,我的程序会获得格式:XXXX年XX月XX日的日期,然后我要转化成XXXX-XX-XX形式,并存成timestamp形式时间信息存入数据库,为完成以时间排序的工作做好准备。

一、时间格式转换

刚开始我获得了一个字符串,里面是一个日期:2012年10月1日。因为我想把这种格式用dateformat类解析成2012-10-01的形式,所以我在初始化一个格式的时候是这样的:

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");

然后我就弱弱用SimpleDateFormat的parse函数对我得到的字符串进行解析。然后用format妄想生成2012-10-01形式的结果。当时的代码是这样的:

format.format(format.parse(“2012年10月1日”));

。。。现在看来,我弱爆了!

后来仔细一看才发现parse和format功能类似一种互逆过程:

parse可以把传入的字符串按照format定义的格式从第一个字符开始解析,并转化成Date类型的时间。而format则可以把Date类型的时间数据转化成一个字符串。所以,上面的代码format.format(format.parse(“2012年10月1日”));仅仅想让他运行不报错,就要把format的格式定义成要处理的字符串中的时间格式:我们这里当然是应该定义成:

SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日");这样就可以把传入的时间“2012年10月1日”在String和Date两种类型间转化。

那么我想要形如yyyy-MM-dd的时间怎么办呢?

只能手工把yyyy年MM月dd日形式的时间通过字符串操作转化成形如yyyy-MM-dd的String,然后定义SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");对转化后的新String进行操作。

总结:所以无论你要处理什么格式的时间,在定义format的时候一定要定义和传入的时间格式一致的形式。DateFormat只能进行在同一种时间格式里做Date和String类型的转化。想换种时间格式,就要自己手动提取和拼接字符串。如,我的代码是这样的:

String tmp = datetext.substring(0, 4) + "-" + datetext.substring(5, 7) + "-" + datetext.substring(8, 10)";

然后我对tmp进行parse的处理,就可以得到yyyy-MM-dd形式的Date类型时间。

 

二、从时间数据中获取Timestamp,并存入数据库

这里先说下Timestamp只有一种格式就是:yyyy-MM-dd hh:mm:ss.ff(这里最后的ff是毫秒)

我获取Timestamp代码如下:

Timestamp ts = Timestamp.valueOf(tmp);


 

然后在数据库操作的代码里用setTimestamp插入数据就行了:

String sqlurl = "jdbc:mysql://localhost:3306/CityMaps?user=root&password=123456&useUnicode=true&characterEncoding=utf8";
				connection = DriverManager.getConnection(sqlurl);

				PreparedStatement preparedStatement;
				preparedStatement = connection
						.prepareStatement("INSERT INTO News(type,title,summary,url,updatetime) VALUES(?,?,?,?,?)");
				preparedStatement.setString(1, type);
				preparedStatement.setString(2, title);
				preparedStatement.setString(3, "");
				preparedStatement.setString(4, url);
				preparedStatement.setTimestamp(5,updatetime);
				
				// 执行语句。
				preparedStatement.executeUpdate();


技术相关更多文章猛击:哇啦天堂论坛技术区

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值