将String型的“xxxx年xx月xx日”转换成Date型

  万事没有绝对,今天修改完流程的bug以后,准备测试一下报表,结果发现一个问题:在选择了年度查询以后搜索结果显示无数据,可是上一次的查询记录还有,后来使用firefox debug调试发现是因为在查询数据的时候出现错误 直接跳到error处理造成的。这时候我就想怎么会有error呢,看eclipse后台才发现后台报错,报的是NuclearYear(一个字段) datatype的问题。

    原来没少测试年度问题,看到数据类型的问题我决定先查看一下数据类型的。找到DM的元数据表对应了一下发现NuclearYear的数据类型改变了,最开始是String类型的,现在变成了DateTime类型的,这样就造成了datatype不匹配的错误。在lab问了一下负责人,原来是DM修改了数据类型以后 也没告诉BPM 等到我们使用的时候才发现数据类型已经修改了,真是太不负责任了抱怨了一下还要修改。

将String型的“xxxx年xx月xx日”转换成Date型_第1张图片

在选择年度的时候都是如上述图片中的数据一样,在传到后台的时候传递的是一个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 = Calendar.getInstance();
		 int year = cal.get(Calendar.YEAR);
              //通过获得前台传递的数值来判断年份
       		 int indexNum = Integer.parseInt(index);
		 int  actualYear = 0;
		 actualYear = year + 3 - indexNum;
		 String yearStr = Integer.toString(actualYear);
		 String nuclearYearStr = yearStr + "-01-" + "01";
		 return DTStringtoDate(nuclearYearStr);
	 }

	 private Date indexToYearEnd(String index){
		 Calendar cal = Calendar.getInstance();
		 int year = cal.get(Calendar.YEAR);
		 int indexNum = Integer.parseInt(index);
		 int  actualYear = 0;
		 actualYear = year + 3 - indexNum;
		 String yearStr = Integer.toString(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.Date(timeDate.getTime());//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.Timestamp(datetime.getTime());
   }
  
   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类型,即只需要年月日的,可以选择使用java.sql.Date类型,
若对应的是MSsqlserver数据库的DateTime类型,即需要年月日时分秒的,选择java.sql.Timestamp类型
你可以使用dateFormat定义时间日期的格式,转一个字符串即可

package personal.jessica;
import java.util.Date;
import java.util.Calendar;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.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) 
   throws java.text.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.Timestamp(timeDate.getTime());//Timestamp类型,timeDate.getTime()返回一个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.Date(timeDate.getTime());//sql类型
   return dateTime;
}

public static void main(String[] args){
   Date da = new Date();
   //注意:这个地方da.getTime()得到的是一个long型的值
   System.out.println(da.getTime());
  
   //由日期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 Timestamp(Calendar.getInstance().get(
       Calendar.YEAR) - 1900, Calendar.getInstance().get(
       Calendar.MONTH), Calendar.getInstance().get(
       Calendar.DATE), Calendar.getInstance().get(
       Calendar.HOUR), Calendar.getInstance().get(
       Calendar.MINUTE), Calendar.getInstance().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:"+date1.toString());//结果显示
     System.out.println("Timestamp:"+date2.toString());//结果显示
   }catch(Exception e) {
     e.printStackTrace();
   }
 }
}

 这样就是实现了int转为date类型。实际上也是String转为Date类型的。

你可能感兴趣的:(将String型的“xxxx年xx月xx日”转换成Date型)