GVKun编程网logo

如何从java.sql.Timestamp转换为java.util.Date?(java的timestamp转date)

18

对于如何从java.sql.Timestamp转换为java.util.Date?感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍java的timestamp转date,并为您提供关于Class

对于如何从java.sql.Timestamp转换为java.util.Date?感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍java的timestamp转date,并为您提供关于ClassCastException:无法将java.util.Date强制转换为java.sql.Date、java 中的日期类型:java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp 区别和总结、Java-将java.time.Instant转换为java.sql.Timestamp,不带区域偏移、java.sql.Date 与 java.sql.Timestamp 的区别的有用信息。

本文目录一览:

如何从java.sql.Timestamp转换为java.util.Date?(java的timestamp转date)

如何从java.sql.Timestamp转换为java.util.Date?(java的timestamp转date)

此代码

startDate = new Date(timestampValue.getTime));

给我 :

2012-16-02 05:16:17

什么时候

System.out.println(timestampValue);

返回:

2012-01-02 05:16:17.0

答案1

小编典典

您应该改用日历:

Calendar start = Calendar.getInstance();start.setTimeInMillis( timeStampValue.getTime() );

ClassCastException:无法将java.util.Date强制转换为java.sql.Date

ClassCastException:无法将java.util.Date强制转换为java.sql.Date

您好,我的代码正在抛出ClassCastException。StackTrace显示:

java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date    at com.affiliate.DAO.AffiliateDAO.insertAffiliate(AffiliateDAO.java:48)

即@ ps.setDate(6,(Date)affiliate.getDate()); 在DAO

以下是我的servlet:

   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    Affiliate af= new Affiliate();    af.setFisrtName(request.getParameter("txtFname"));    af.setLastName(request.getParameter("txtLname"));    af.setGender(request.getParameter("txtGender"));    af.setCategory(request.getParameter("txtCategory"));    String dob=(request.getParameter("txtDob"));    SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy");      Date date;    try {        date = (Date)formatter.parse(dob);        af.setDate(date);    } catch (ParseException e) {        // TODO Auto-generated catch block        e.printStackTrace();    }    af.setAge(Integer.parseInt(request.getParameter("txtAge")));    af.setAddress(request.getParameter("txtAddr"));    af.setCountry("India");    af.setState(request.getParameter("txtState"));    af.setCity(request.getParameter("txtCity"));    af.setPinCode(Integer.parseInt(request.getParameter("txtPin")));    af.setEmailId(request.getParameter("txtEmail"));    af.setStd(Integer.parseInt(request.getParameter("txtStd")));    af.setContactNo(Integer.parseInt(request.getParameter("txtPhone")));    af.setMobileNo(Long.parseLong(request.getParameter("txtMobile"),10));AffiliateService afs=new AffiliateService();**afs.createAffiliate(af);**}

以下是我的DAO:

public void insertAffiliate(Affiliate affiliate){    String sql="INSERT INTO REGISTER " +"(id,FisrtName,LastName,Gender,Category,DateOfBirth,Age,Address,Country,State,City,PinCode,EmailId,Std,ContactNo,MobileNo)VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";    Connection conn = null;    try {        **conn = dataSource.createConnection();**        PreparedStatement ps = conn.prepareStatement(sql);        ps.setInt(1, affiliate.getId());        ps.setString(2, affiliate.getFisrtName());        ps.setString(3, affiliate.getLastName());        ps.setString(4,affiliate.getGender());        ps.setString(5, affiliate.getCategory());        ***ps.setDate(6, (Date) affiliate.getDate());***        ps.setInt(7, affiliate.getAge());        ps.setString(8, affiliate.getAddress());        ps.setString(9,affiliate.getCountry());        ps.setString(10,affiliate.getState());        ps.setString(11, affiliate.getCity());        ps.setInt(12, affiliate.getPinCode());        ps.setString(13, affiliate.getEmailId());        ps.setInt(14,affiliate.getStd());        ps.setInt(15, affiliate.getContactNo());        ps.setLong(16, affiliate.getMobileNo());        ps.executeUpdate();        ps.close();    } catch (SQLException e) {        throw new RuntimeException(e);    } finally {        if (conn != null) {            try {                conn.close();            } catch (SQLException e) {}        }    }}

以下是我的DTO:

public class Affiliate {@NotNull    @Past    Date date;public Date getDate() {        return date;    }    public void setDate(Date date) {        this.date = date;    }

请在这方面帮助我

答案1

小编典典

由于文档说,将Date在参数setDate()PreparedStatement需要类型的Date对象java.sql.Date。但是您似乎java.util.DateAffiliate课堂上使用了对象。

这就是为什么你得到了ClassCastException: java.util.Date cannot be cast tojava.sql.Date

要解决此问题,您需要将类中的Date对象类型更改Affiliatejava.sql.Date或执行此操作

ps.setDate(6, new java.sql.Date(affiliate.getDate().getTime()));

java 中的日期类型:java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp 区别和总结

java 中的日期类型:java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp 区别和总结

     

在 web 开发中,避免不了对日期的操作,就几种常见的日期操作做个总结 (部分参考网络,在此表示感谢):

java.util.Date、Java.util.Calendar、java.sql.Date、java.sql.Time、java.sql.Timestamp

 

java.lang.Object 
....|__java.util.Date 
..........|__java.sql.Date/java.sql.Timestamp /java.sql.Time

....|__java.security.Timestamp

 

java.util.Date 日期格式为:年月日时分秒 
java.sql.Date 日期格式为:年月日 [只存储日期数据不存储时间数据] 
java.sql.Time 日期格式为:时分秒 
java.sql.Timestamp 日期格式为:年月日时分秒纳秒(毫微秒)

关系:

    java.util.Date 这个类是 java.sql.Date,  java.sql.Time,  java.slq.Timestamp 这三个类的父类。这三个类对 java.util.Date 类进行了包装。

联系:

    java.sql.Date 类屏蔽了 java.util.Date 类的时间有关的方法(形如:hh:mm:ss), 因此,不可以通过这个类访问时间有关的信息,比如,如果你通过 sqlDate.getHour () 方法去访问小时信息,此方法会抛出一个 IllegalArgumentException异常。这是因为java.sql.Date在继承java.util.Date类的时候对父类进行了重写,禁用了时间访问的方法。之所以这么处理,是为了和数据库的Date数据类型相匹配,数据库的Date数据类行只是保存日期有关的字段。

    Java.sql.Time 类屏蔽了 java.util.Date 的日期有关的字段(形如:yyyy-MM-dd), 因此,不能通过这个类访问日期有关的信息,比如:如果你通过 sqlTime.getYear () 方法去获取年有关的信息,此方法会抛出一个 IllegalArgumentException异常。这是因为java.sql.Time在继承java.util.Date类的时候对父类进行了重写,禁用了日期访问的方法。之所以这么处理,是为了和数据库的Time数据类型相匹配,数据库的Time数据类行只是保存时间有关的字段。

  Java.sql.Timestamp字段则对java.util.Date这个类进行了扩充,它在java.util.Date类的基础上增加了毫秒的时间访问控制,因此,你可以通过 getNanos()方法去获取时间的毫微秒数(注意此处获取的时间是以毫微秒为单位的,1 秒等于十亿毫微秒),同样的,这也是为了和数据库中的 Timestamp 数据类型进行匹配。

理清了上述四个类的关系,那么 java.util.Date 和 java.util.Calendar 类有什么关系呢?

   Java.util.Calendar 类是 java.util.Date 类的一个更加深入,更加全面的替代。Java.util.Calendar 类支持 java.util.Date 的所有功能,此外,Calendar 还引入了多语言,多区域的特性,可以根据需要获取不同区域,不同时区的时间,Calendar 还增加了比 Date 更加方便和快捷的许多操作,如获取一年当中的第几个星期,各个月的天数等便捷的方法。

 

注意:

Java.util.Calendar 区别与 java.util.Date 的几个地方也需要注意一下:首先,Calendar 增加了毫秒的时间段,通过它可以获取时间点的毫秒值,而 java.util.Date 只是精确到秒。其次,Calendar 过去年的时候是当前年份比如:2010,而 Date 获取年份的时获取到的是当前年份 - 1900 的一个值(2010-1900=110,因此,你调用 getYear 后过去的值就是 110)。最后 Calendar 是一个抽象类,之所以能够实例化,是因为此处的 Calendar 充当了一个类似于工厂的作用,在 getInstance 方法中实例化了 Calendar 子类 GregorianCalendar,并把它返回给用户使用。

 

针对不同的数据库选用不同的日期类型 
・Oracle 的 Date 类型,只需要年月日,选择使用 java.sql.Date 类型 
・MS Sqlserver 数据库的 DateTime 类型,需要年月日时分秒,选择 java.sql.Timestamp 类型

 

String 日期格式转换成 Date 日期格式

//java.util.Date 时间格式的转换
    SimpleDateFormat f_utilDate=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
  String str="2011-5-31 14:40:50";
  try {
   java.util.Date utilDate=f_utilDate.parse(str);
   System.out.println(f_utilDate.format(utilDate));
  } catch (ParseException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

    //java.sql.Date 时间格式的转换
    SimpleDateFormat f_sqlDate=new SimpleDateFormat("yyyy-MM-dd");
    java.sql.Date sqlDate = java.sql.Date.valueOf("2010-08-20");
    System.out.println(f_sqlDate.format(sqlDate));
    
    //java.sql.Time sqltime 时间格式的转换
    SimpleDateFormat f_sqlTime=new SimpleDateFormat("hh:mm:ss");
    java.sql.Time sqltime = java.sql.Time.valueOf("13:44:53"); 
    System.out.println(f_sqlTime.format(sqltime));
    
    //java.sql.Timestamp 时间格式的转换
    SimpleDateFormat f_timestamp=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS");
    java.sql.Timestamp timestamp = java.sql.Timestamp.valueOf("2010-08-20 14:06:27.186"); 
    System.out.println(f_timestamp.format(timestamp));

 

 //java.util.Date 转换成 java.sql.Date 格式
       try{
        SimpleDateFormat DateFormate =   new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
               java.util.Date date1 = DateFormate.parse("2011-5-31 14:40:50");
               java.sql.Date sqlDate = new java.sql.Date(date1.getTime());
               System.out.println(DateFormate.format(sqlDate));
       }catch (Exception ex) {
            System.out.println(ex.getMessage());
       }

       //java.sql.Date 转换成 java.util.Date 格式
       java.sql.Date sqlDate1=java.sql.Date.valueOf("2005-12-12");
       java.util.Date utilDate1=new java.util.Date(sqlDate1.getTime());
       System.out.println ("java.sql.Date 转换成 java.util.Date 格式:"+f.format (utilDate1));

    //java.util.Date 转换 java.sql.Timestamp 
    new java.sql.Timestamp (new java.util.Date ().getTime ());// 此处 IDE 报错

    //java.util.Date 转换 java.sql.Time 
    new java.sql.Time(new java.util.Date().getTime());

    

    Timestamp timestamp  = new Timestamp(System.currentTimeMillis());

   我们可以使用 DateFormat 处理字符串来定义时间日期的格式 
   注:String 都是先转换为 java.util.Date,然后再转换成所需的格式

try{   
             String dateString = "2010-08-20 12:00:00.125";    
              DateFormat dateFormat = new SimpleDateFormat ("yyyy-MM-dd kk:mm:ss.SSS",Locale.ENGLISH);// 设定格式   
             dateFormat.setLenient(false);   
             java.util.Date utilDate = dateFormat.parse (dateString);//util 类型   
             java.sql.Timestamp dateTime = new java.sql.Timestamp (utilDate.getTime ());//Timestamp 类型,timeDate.getTime () 返回一个 long 型   
             System.out.println(dateTime);   
        }catch(Exception ex){   
            ex.printStackTrace();   
        }        

 

Java MySQL 数据类型对照

类型名称 显示长度 数据库类型 JAVA 类型 JDBC 类型索引 (int) 描述
           
VARCHAR L+N VARCHAR java.lang.String 12  
CHAR N CHAR java.lang.String 1  
BLOB L+N BLOB java.lang.byte[] -4  
TEXT 65535 VARCHAR java.lang.String -1  
           
INTEGER 4 INTEGER UNSIGNED java.lang.Long 4  
TINYINT 3 TINYINT UNSIGNED java.lang.Integer -6  
SMALLINT 5 SMALLINT UNSIGNED java.lang.Integer 5  
MEDIUMINT 8 MEDIUMINT UNSIGNED java.lang.Integer 4  
BIT 1 BIT java.lang.Boolean -7  
BIGINT 20 BIGINT UNSIGNED java.math.BigInteger -5  
FLOAT 4+8 FLOAT java.lang.Float 7  
DOUBLE 22 DOUBLE java.lang.Double 8  
DECIMAL 11 DECIMAL java.math.BigDecimal 3  
BOOLEAN 1 同 TINYINT      
           
ID 11 PK (INTEGER UNSIGNED) java.lang.Long 4  
           
DATE 10 DATE java.sql.Date 91  
TIME 8 TIME java.sql.Time 92  
DATETIME 19 DATETIME java.sql.Timestamp 93  
TIMESTAMP 19 TIMESTAMP java.sql.Timestamp 93  
YEAR 4 YEAR java.sql.Date 91





 

 

对于 bolb,一般用于对图片的数据库存储,原理是把图片打成二进制,然后进行的一种存储方式,在 java 中对应 byte[]数组。

 

对 Boolean 类型的解释

mysql 不支持 bool 类型。

1

2

3

4

5

create table xs

(

id int primary key,

bl boolean

)

这样可以创建成功,但检查表结构会发现 mysql 把它替换成 tinyint (1)。

即当把一个数据设置成 bool 类型的时候,数据库会自动转换成 tinyint (1) 的数据类型,其实这个就是变相的 bool。 默认值也就是 1,0 两种,分别对应了 bool 的 true 和 false

在 Java 对应的 POJO 类中,可以根据实际情况使用 java.lang.Boolean 或者 java.lang.Integer。

转自:

http://langgufu.iteye.com/blog/2202744

https://yq.aliyun.com/articles/38115

Java-将java.time.Instant转换为java.sql.Timestamp,不带区域偏移

Java-将java.time.Instant转换为java.sql.Timestamp,不带区域偏移

在我正在开发的应用程序中,我需要将java.time.Instantobject
转换为java.sql.Timestamp。当我创建Instant对象时:

Instant now = Instant.now();

我收到类似的东西2017-03-13T14:28:59.970Z。当我尝试创建这样的Timestamp对象时:

Timestamp current = Timestamp.from(now);

我收到类似的东西2017-03-13T16:28:59.970Z。相同的结果,但有2个小时的延迟。有人可以解释为什么会发生这种情况,并在不造成延迟的情况下为我提供解决此问题的答案吗?

当我这样创建时:

LocalDateTime ldt = LocalDateTime.ofInstant(Instant.now(), ZoneOffset.UTC);Timestamp current = Timestamp.valueOf(ldt);

一切正常。但是我尽量避免转换。有没有一种方法可以只使用Instant对象呢?

答案1

小编典典

我将计算机的时区更改为欧洲/布加勒斯特以进行实验。这是UTC + 2小时(与您的时区一样)。

现在,当我复制您的代码时,得到的结果类似于您的结果:

    Instant now = Instant.now();    System.out.println(now); // prints 2017-03-14T06:16:32.621Z    Timestamp current = Timestamp.from(now);    System.out.println(current); // 2017-03-14 08:16:32.621

输出以注释形式给出。但是,我继续:

    DateFormat df = DateFormat.getDateTimeInstance();    df.setTimeZone(TimeZone.getTimeZone("UTC"));    // the following prints: Timestamp in UTC: 14-03-2017 06:16:32    System.out.println("Timestamp in UTC: " + df.format(current));

现在您可以看到Timestamp真正与Instant我们从头开始的想法一致(只有毫秒不打印,但我相信它们也在那里)。这样您就可以正确地完成所有操作,并且只会感到困惑,因为在打印时我们Timestamp隐式地调用了它的toString方法,而该方法又将获取计算机的时区设置并在该时区中显示时间。仅因为此,显示是不同的。

您尝试使用的另一件事LocalDateTime似乎起作用了,但实际上并没有提供您想要的东西:

    LocalDateTime ldt = LocalDateTime.ofInstant(Instant.now(), ZoneOffset.UTC);    System.out.println(ldt); // 2017-03-14T06:16:32.819    current = Timestamp.valueOf(ldt);    System.out.println(current); // 2017-03-14 06:16:32.819    System.out.println("Timestamp in UTC: " + df.format(current)); // 14-03-2017 04:16:32

现在,当我们Timestamp使用我们的UTC
打印时DateFormat,我们可以看到现在比格林尼治标准时间06:16:32早了2小时,Instant即04:16:32
UTC。因此,这种方法具有欺骗性,看起来像在起作用,但事实并非如此。

这显示了导致Java
8日期和时间类的设计替换旧的麻烦。因此,解决您的问题的真正有效的解决方案可能是让自己得到一个可以轻松接受Instant对象的JDBC
4.2驱动程序,从而避免Timestamp完全转换为一个对象。我不知道该功能是否适用于您,但我相信它会提供。

java.sql.Date 与 java.sql.Timestamp 的区别

java.sql.Date 与 java.sql.Timestamp 的区别

java.sql.Date 只能精确到天

java.sql.Timestamp 可以精确到秒

至少 mysql 中是这样的

关于如何从java.sql.Timestamp转换为java.util.Date?java的timestamp转date的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于ClassCastException:无法将java.util.Date强制转换为java.sql.Date、java 中的日期类型:java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp 区别和总结、Java-将java.time.Instant转换为java.sql.Timestamp,不带区域偏移、java.sql.Date 与 java.sql.Timestamp 的区别的相关知识,请在本站寻找。

本文标签: