将String型的“xxxx年xx⽉xx⽇”转换成Date型
万事没有绝对,今天修改完流程的bug以后,准备测试⼀下报表,结果发现⼀个问题:在选择了年度查询以后搜索结果显⽰⽆数据,可是上⼀次的查询记录还有,后来使⽤firefox debug调试发现是因为在查询数据的时候出现错误 直接跳到error处理造成的。这时候我就想怎么会有error呢,看eclipse后台才发现后台报错,报的是NuclearYear(⼀个字段) datatype的问题。
原来没少测试年度问题,看到数据类型的问题我决定先查看⼀下数据类型的。到DM的元数据表对应了⼀下发现NuclearYear的数据类型改变了,最开始是String类型的,现在变成了DateTime类型的,这样就造成了datatype不匹配的错误。在lab问了⼀下负责⼈,原来是DM修改了数据类型以后 也没告诉BPM 等到我们使⽤的时候才发现数据类型已经修改了,真是太不负责任了抱怨了⼀下还要修改。
在选择年度的时候都是如上述图⽚中的数据⼀样,在传到后台的时候传递的是⼀个int型的数字,⽐如2011传递的是0,2012则是1,2013则是3,…2016则是6。这样在后台通过这些数字来匹配当初的年份。⽐如选择02⽂书⽂件--2013 在传递到后台的是3经过处理以后 变为2013(当然是String类型的)。现在NuclearYear的数据类型改变了,那么这些值就也要相应的改变。
在workplaceXT中查看属性以后知道了NuclearYear变为了 13-3-27 这种形式的数据,在nuclearYear是String类型的时候sql语句查询都是⽤的“like"关键字,现在变为“13-3-27”这种形式的数据以后like就不能
胜任⼯作了。要换成between……and形式(<=,=>)。
所以就想有⼀个区间的问题。⽐如2013年份就要变为2013-01-01 ,2013-12-31这样的。
private Date indexToYearBegin(String index){
Calendar cal = Instance();
int year = (Calendar.YEAR);
//通过获得前台传递的数值来判断年份
int indexNum = Integer.parseInt(index);
int  actualYear = 0;
actualYear = year + 3 - indexNum;
String yearStr = String(actualYear);
String nuclearYearStr = yearStr + "-01-" + "01";
return DTStringtoDate(nuclearYearStr);
error parse new}
private Date indexToYearEnd(String index){
Calendar cal = Instance();
int year = (Calendar.YEAR);
int indexNum = Integer.parseInt(index);
int  actualYear = 0;
actualYear = year + 3 - indexNum;
String yearStr = String(actualYear);
String nuclearYearStr = yearStr + "-12-" + "31";
return DTStringtoDate(nuclearYearStr);
}
//把String变为Date类型
private Date DTStringtoDate (String dateString){
DateFormat dateFormat;
dateFormat = new SimpleDateFormat("yy-MM-dd", Locale.ENGLISH);
dateFormat.setLenient(false);
java.sql.Date dateTime = null;
try{
java.util.Date timeDate = dateFormat.parse(dateString);//util类型
dateTime = new java.sql.Time());//sql类型
}catch(Exception  e){
}
return dateTime;
}
下⾯是到的⼀些关于上述情况的⼀些解决⽅案
private Date DTStringtoDate(String dtToDate){
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
ParsePosition pos = new ParsePosition(0);
java.util.Date datetime = formatter.parse(dtToDate, pos);
java.sql.Timestamp ts = null;
if(datetime != null){
ts = new java.sql.Time());
}
return ts;
}
分析如下:
1. ParsePosition pos = new ParsePosition(0);      从第⼀个字符开始解析
public class ParsePosition extends Object
ParsePosition 是 Format 及其⼦类所使⽤的简单类,⽤来在分析过程中跟踪当前位置。
2. java.util.Date datetime = formatter.parse(dtToDate, pos);
对参数dtToDate(String类型)从第⼀个字符开始解析(由pos),转换成java.util.Date类型,
⽽这个Date的格式为"yyyy-MM-dd"(因为SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");)
3. java.sql.Timestamp(与java.sql.Date)
在开发web应⽤中,针对不同的数据库⽇期类型,我们需要在我们的程序中对⽇期类型做各种不同的转换。若对应数据库数据是oracle的Date类型,即只需要年⽉⽇的若对应的是MSsqlserver数据库的DateTime类型,即需要年⽉⽇时分秒的,选择java.sql.Timestamp类型
你可以使⽤dateFormat定义时间⽇期的格式,转⼀个字符串即可
package personal.jessica;
import java.util.Date;
import java.util.Calendar;
import java.sql.Timestamp;
DateFormat;
SimpleDateFormat;
import java.util.Locale;
class Datetest{
/**
*method 将字符串类型的⽇期转换为⼀个timestamp(时间戳记java.sql.Timestamp)
* @param dateString 需要转换为timestamp的字符串
* @return dataTime timestamp
*/
public final static java.sql.Timestamp string2Time(String dateString)
ParseException {
DateFormat dateFormat;
dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss.SSS", Locale.ENGLISH);//设定格式
//dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss", Locale.ENGLISH);
dateFormat.setLenient(false);
java.util.Date timeDate = dateFormat.parse(dateString);//util类型
java.sql.Timestamp dateTime = new java.sql.Time());//Timestamp类型,Time()返回⼀个long型
return dateTime;
}
/**
*method 将字符串类型的⽇期转换为⼀个Date(java.sql.Date)
*@param dateString 需要转换为Date的字符串
*@return dataTime Date
*/
*/
public final static java.sql.Date string2Date(String dateString)
throws java.lang.Exception {
DateFormat dateFormat;
dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
dateFormat.setLenient(false);
java.util.Date timeDate = dateFormat.parse(dateString);//util类型
java.sql.Date dateTime = new java.sql.Time());//sql类型
return dateTime;
}
public static void main(String[] args){
Date da = new Date();
//注意:这个地⽅da.getTime()得到的是⼀个long型的值
System.out.Time());
//由⽇期date转换为timestamp
//第⼀种⽅法:使⽤new Timestamp(long)
Timestamp t = new Timestamp(new Date().getTime());
System.out.println(t);
//第⼆种⽅法:使⽤Timestamp(int year,int month,int date,int hour,int minute,int second,int nano)  Timestamp tt = new Instance().get(
Calendar.YEAR) - 1900, Instance().get(
Calendar.MONTH), Instance().get(
Calendar.DATE), Instance().get(
Calendar.HOUR), Instance().get(
Calendar.MINUTE), Instance().get(
Calendar.SECOND), 0);
System.out.println(tt);
try {
String sToDate = "2005-8-18";//⽤于转换成java.sql.Date的字符串
String sToTimestamp = "2005-8-18 14:21:12.123";//⽤于转换成java.sql.Timestamp的字符串    Date date1 = string2Date(sToDate);
Timestamp date2 = string2Time(sToTimestamp);
System.out.println("Date:"+String());//结果显⽰
System.out.println("Timestamp:"+String());//结果显⽰
}catch(Exception e) {
e.printStackTrace();
}
}
}
这样就是实现了int转为date类型。实际上也是String转为Date类型的。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。