2014-04-15 90 views
0

我有这个代码,我正在使用从DOB计算年龄。但我不确定它是否正常工作,或者当我从另一个文件调用此函数时,我不是能够看到任何输出。计算从DOB提取的年龄从数据库

public ArrayList<Integer> getEmployeeAge() { 
     // TODO Auto-generated method stub 


     ArrayList<Integer> employeeage = new ArrayList<Integer>(); 
     ResultSet rs = null; 

     try { 
      LibraryConnection lc = new LibraryConnection(library, dbConnection); 


      rs = lc.executeQuery("GetEmployeeAge", null); 


      while(rs.next()){ 
/*    QuartReport qcd = new QuartReport(); 

       qcd.setYear(rs.getInt(1)); 
       qcd.setQuarter(rs.getInt(2)); 
       qcd.setCount(rs.getInt(3)); 
*/ 

       String dob = rs.getString(1); 

       int yearDOB = Integer.parseInt(dob.substring(6, 10)); 
       int monthDOB = Integer.parseInt(dob.substring(3, 5)); 
       int dayDOB = Integer.parseInt(dob.substring(0, 2)); 

       //CALCULATE THE CURRENT YEAR, MONTH AND DAY 
       //INTO SEPERATE VARIABLES 
       DateFormat dateFormat = new SimpleDateFormat("yyyy"); 
       java.util.Date date = new java.util.Date(); 
       int thisYear = Integer.parseInt(dateFormat.format(date)); 

       dateFormat = new SimpleDateFormat("MM"); 
       date = new java.util.Date(); 
       int thisMonth = Integer.parseInt(dateFormat.format(date)); 

       dateFormat = new SimpleDateFormat("dd"); 
       date = new java.util.Date(); 
       int thisDay = Integer.parseInt(dateFormat.format(date)); 

       //CREATE AN AGE VARIABLE TO HOLD THE CALCULATED AGE 
       //TO START WILL – SET THE AGE EQUEL TO THE CURRENT YEAR MINUS THE YEAR 
       //OF THE DOB 
       int age = thisYear - yearDOB; 
       //IF THE CURRENT MONTH IS LESS THAN THE DOB MONTH 
       //THEN REDUCE THE DOB BY 1 AS THEY HAVE NOT HAD THEIR 
       //BIRTHDAY YET THIS YEAR 
       if(thisMonth < monthDOB){ 
       age = age -1; 
       } 

       //IF THE MONTH IN THE DOB IS EQUEL TO THE CURRENT MONTH 
       //THEN CHECK THE DAY TO FIND OUT IF THEY HAVE HAD THEIR 
       //BIRTHDAY YET. IF THE CURRENT DAY IS LESS THAN THE DAY OF THE DOB 
       //THEN REDUCE THE DOB BY 1 AS THEY HAVE NOT HAD THEIR 
       //BIRTHDAY YET THIS YEAR 
       if(thisMonth == monthDOB && thisDay < dayDOB){ 
       age = age -1; 
       } 

       employeeage.add(age); 
      } 

      return employeeage; 
     }catch (SQLException e) { 
      e.printStackTrace(); 
     }catch (Exception e) { 
      logger.error(e); 
      e.printStackTrace(); 
     }finally { 
      SqlUtils.close(rs); 
     } 


     return null; 
    } 

,我执行的XML查询:

<s:query name="GetEmployeeAge" xmlns:s="http://www.slamb.org/axamol/sql-library/statement"> 
<s:sql databases="mysql"> 
SELECT DOB(`Date Of Birth`) 
FROM `Employee` LEFT JOIN Employee-Detail ON `Employee.MRN` = `Employee-Detail.MRN` 
GROUP BY DOB(`Date Of Birth`) 
ORDER BY DOB(`Date Of Birth`) ASC 
</s:sql> 
</s:query> 

谁能帮我在指着什么可能是这个原因?

UPDATE1:的SQL查询工作correctly.I执行它在MySQL Workbench和它在这种格式YYYY-MM-DD 00:00:00

UPDATE2返回结果:我使用的这个结果生成一个图表其详细信息在Generating Histogram through Java and PrimeFaces

+2

使用JodaTime,将数据库中的值转换为DateTime对象 – MadProgrammer

+0

我不确定你的意思声明,你“无法看到任何输出“。您的代码中是否存在一些记录或System.out语句? –

+0

@MadProgrammer问题是我在使用API​​时受到了限制。系统不支持它。你可以看看代码,并在出现任何错误时指出帮助吗? – user2916886

回答

1

您遇到的最大问题是,一年和一个月不是一个整数,这就是为什么我们建议使用一个正确设计的库来处理这些奇怪的事情......像Joda-Time ...

一年有365.242天这使得长达一个月30.436(大约)天...:P

public class DateOfBirth { 

    public static final double DAYS_IN_YEAR = 365.242; 
    public static final double DAYS_IN_MONTH = DAYS_IN_YEAR/12d; 

    public static void main(String[] args) { 
     int day = 8; 
     int month = 3; 
     int year = 1972; 

     // Number of days... 
     double time = toDays(year, month, day); 
     // One day less of the year 2015... 
     double today = toDays(2014, 4, 16); // today... 

     double diff = today - time; 

     int years = (int)Math.round(diff/DAYS_IN_YEAR); 
     double over = diff % DAYS_IN_YEAR; 
     int months = (int)(over/DAYS_IN_MONTH); 
     over = over % DAYS_IN_MONTH; 
     int days = (int) over; 

     System.out.println(years + " years, " + months + " months, " + days + " days");   
     System.out.println(NumberFormat.getNumberInstance().format(diff/DAYS_IN_YEAR));    
    } 

    public static double toDays(int year, int month, int day) {    
     return (year * DAYS_IN_YEAR) + (month * DAYS_IN_MONTH) + day;    
    } 

} 

此输出......

42 years, 1 months, 7 days 
42.105 

现在,这个问题,你会得到各种奇怪的四舍五入错误,所以它是,至多,猜测......