1. 程式人生 > 其它 >Exception in thread “main“ java.lang.IllegalArgumentException: Cannot format given Object as a Date

Exception in thread “main“ java.lang.IllegalArgumentException: Cannot format given Object as a Date

技術標籤:Hivehive

Exception in thread “main” java.lang.IllegalArgumentException: Cannot format given Object as a Date

執行下面程式碼出現上面這個錯誤:

package hive;
import java.text.SimpleDateFormat;
import org.apache.hadoop.hive.metastore.api.Date;
import org.apache.hadoop.hive.ql.exec.UDF;

public class myprint extends UDF {
       public String evaluate1()  {
           SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
           return df.format(new Date());
       }
       //主方法測試一下是否可以輸出,程式碼是否有問題
       public static void main (String[] args)  {
    	   myprint sm=new myprint();
    	   System.out.println(sm.evaluate1());
       }
}

在這裡插入圖片描述

我反覆找原因,找到了下面這個原因:

把import org.apache.hadoop.hive.metastore.api.Date;去掉
改成:import java.util.Date;通用的這個就不會報錯了

程式碼如下:

package hive;
import java.text.SimpleDateFormat;
import org.apache.hadoop.hive.ql.exec.UDF;
import java.text.SimpleDateFormat;
public class myprint extends UDF {
       public String evaluate1()  {
           SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
           return df.format(new Date());
       }
       //主方法測試一下是否可以輸出,程式碼是否有問題
       public static void main (String[] args)  {
    	   myprint sm=new myprint();
    	   System.out.println(sm.evaluate1());
       }
}

在這裡插入圖片描述
也可以用下面這個獲取系統的當前時間:

package hive;
import java.text.SimpleDateFormat;
import org.apache.hadoop.hive.metastore.api.Date;
import org.apache.hadoop.hive.ql.exec.UDF;

public class hivedate extends UDF{
	 public Date evaluate1()  {
         SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         //return df.format(new Date());
		return null ;
         
     }

這個就不要用到這個了,可以到系統給的包

import java.util.Date;

問題解決了,不過上面是我解決問題的方法,和大家的不一樣,大家可以認真思考,找到自己問題所在。