Date、Calendar、Timestamp的区别、相互转换与使用

1 Java.util.Date

包含年、月、日、时、分、秒信息。

 // String转换为Date
String dateStr="2013-8-13 23:23:23";
String pattern="yyyy-MM-dd HH:mm:ss";
DateFormate dateFormat=new SimpleDateFormat(pattern);
Date date=dateFormat.parse(dateStr);
date=dateFormat.format(date);

2 Java.sql.Date

包含年、月、日信息,注意不包含时、分、秒信息

继承自java.util.Date。用来读写数据库中的时间类型的字段,而无法使用Java.util.Date类型来操作数据库中的时间类型字段。

 // java.util.Date转换为java.sql.Date
new java.sql.Date(utilDate.getTime());// 其中utilDate为java.util.Date类型的对象

3 Java.util.Calendar

包含年、月、日、时、分、秒、毫秒信息。

JDK1.1引入,用以代替java.util.Date。

 // Date转为Calendar
Date date=new Date();
Calendar calendar=Calendar.getInstance();
calendar.setTime(date); // Calendar转为Date
Calendar ca=Calendar.getInstance();
Date d =(Date) ca.getTime();

4 Java.sql.Timestamp

包含年、月、日、时、分、秒、纳秒(nano)信息。

继承自java.util.Date。比java.sql.Date包含更多信息。在数据库相关操作中使用,如rs.getTimestamp,ps.setTimeStamp等。例如:若数据库中某字段hireDate为Oracle的Date类型,则使用getTimestamp时能够将年、月、日、时、分、秒信息取出;但使用getDate时则只能取出年、月、日信息。因此,一般推荐使用getTimestamp。

 // java.util.Calendar转换为java.sql.Timestamp
new Timestamp(Calendar.getInstance().getTimeInMillis());
// java.util.Date转换为java.sql.Timestamp
new Timestamp(date.getTime());
// String转换为java.sql.Timestamp,String格式:yyyy-mm-dd hh:mm:ss[.f...] ,方括号表示可选
Timestamp.valueOf("2013-07-06 01:49:30");

数据库时间类型操作

1 在数据库中插入时间

PreparedStatement ps = con.prepareStatement("insert into TableName(dAddTime) values(?)");
这里有三种方式:

1) ps.setDate(1,new java.sql.Date(System.currentTimemillis()));
2) ps.setTime(2,new java.sql.Time(System.currentTimemillis()));
3) ps.setTimestamp(3,new java.sql.Timestamp(System.currentTimemillis()));

第一种只插入年月日 0000-00-00
第二种只插入时间 00:00:00
第三种则插入完整的时间 0000-00-00 00:00:00.000 .000是毫秒数。

2 取出数据库时间

通常只有两种:

1) getDate(String colname); // 取出日期 格式:0000-00-00
2) getTimestamp(String colname); // 取出日期和时间 格式:0000-00-00 00:00:00.000

例子:

public class ScriptInsertNo32 {
public static void main(String[] args) {
Connection connection = null;
PreparedStatement preparedStatement1 = null;
PreparedStatement preparedStatement2 = null;
Calendar calendar = Calendar.getInstance();
Date nowDate = null; try {
String driverClass = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
String url = "jdbc:sqlserver://localhost:1433;DatabaseName=water";
String userString = "sa";
String passwardString = "sicc2005"; Class.forName(driverClass);
connection = DriverManager.getConnection(url, userString, passwardString); String sql1 = "INSERT INTO dbo.MonitorData VALUES "
+ "('2c94a03d475d56f201475d71905e0006', '2c94a03d475d56f201475d5dc8570003', ?, ?, ?)";
String sql2 = "INSERT INTO dbo.MonitorData VALUES "
+ "('2c94941448a657ff0148a718521c0007', '2c94941448a657ff0148a66db3df0003', ?, ?, ?)";
preparedStatement1 = connection.prepareStatement(sql1);
preparedStatement2 = connection.prepareStatement(sql2);
nowDate = new Date();
calendar.setTime(nowDate);
Random random = new Random();
DecimalFormat df = new DecimalFormat("0.00"); for(int i = 0; i < 5; ++i) {
double val1 = ((double) (random.nextInt()%80)/10);
double val2 = ((double) (random.nextInt()%1800)/10);
// System.out.println("val:" + df.format(val));
val1 = Double.parseDouble(df.format(val1));
val2 = Double.parseDouble(df.format(val2));
val1 = Math.abs(val1);
val2 = Math.abs(val2);
calendar.add(Calendar.MINUTE, 5);
Timestamp timestamp = new Timestamp(calendar.getTimeInMillis());
preparedStatement1.setTimestamp(1, timestamp);
preparedStatement1.setTimestamp(2, timestamp);
preparedStatement2.setTimestamp(1, timestamp);
preparedStatement2.setTimestamp(2, timestamp);
preparedStatement1.setDouble(3, val1);
preparedStatement2.setDouble(3, val2);
preparedStatement1.execute();
preparedStatement2.execute();
} } catch (Exception e) {
e.printStackTrace();
} finally {
       if(connection != null)
  try {
connection.close();
  }
  } catch (Exception e) {
  e.printStackTrace();
  }
       if(preparedStatement1 != null)
  try {
preparedStatement1.close();
  }
  } catch (Exception e) {
  e.printStackTrace();
  }
       if(preparedStatement2 != null)
  try {
preparedStatement2.close();
  }
  } catch (Exception e) {
  e.printStackTrace();
  }
}
}
}

参考资料:

http://blog.csdn.net/kingzone_2008/article/details/9256287

http://wenku.baidu.com/link?url=HZ9q8WoIfHnMnSmenLKpDJpJCTFo0wYadcW6VR-ju3Lw7mq-PXUoDAfI-fqX5TkQd1MCcF9afN4STt-q3T67Q4ruEZtPnSxsWmHgd-Fg2lu

用Java操作数据库Datetime数据的更多相关文章

  1. java操作数据库:增删改查

    不多bb了直接上. 工具:myeclipse 2016,mysql 5.7 目的:java操作数据库增删改查商品信息 test数据库的goods表 gid主键,自增 1.实体类Goods:封装数据库数 ...

  2. Java操作数据库——使用连接池连接数据库

    Java操作数据库——使用连接池连接数据库 摘要:本文主要学习了如何使用JDBC连接池连接数据库. 传统方式和连接池方式 传统方式的步骤 使用传统方式在Java中使用JDBC连接数据库,完成一次数据库 ...

  3. Java操作数据库——使用JDBC连接数据库

    Java操作数据库——使用JDBC连接数据库 摘要:本文主要学习了如何使用JDBC连接数据库. 背景 数据持久化 数据持久化就是把数据保存到可掉电式存储设备中以供之后使用.大多数情况下,特别是企业级应 ...

  4. JDBC 数据库连接 Java操作数据库 jdbc快速入门

    JDBC基本概念 Java DataBase Connectivity 数据库连接 java操作数据库 本质上(sun公司的程序员)定义的一套操作关系型数据库的规则 既接口  更新内容之前 代码 pa ...

  5. JDBC数据源(DataSource)数据源技术是Java操作数据库的一个很关键技术,流行的持久化框架都离不开数据源的应用。

    JDBC数据源(DataSource)的简单实现   数据源技术是Java操作数据库的一个很关键技术,流行的持久化框架都离不开数据源的应用. 2.数据源提供了一种简单获取数据库连接的方式,并能在内部通 ...

  6. Java操作数据库——手动实现数据库连接池

    Java操作数据库——手动实现数据库连接池 摘要:本文主要学习了如何手动实现一个数据库连接池,以及在这基础上的一些改进. 部分内容来自以下博客: https://blog.csdn.net/soonf ...

  7. Java操作数据库——在JDBC里使用事务

    Java操作数据库——在JDBC里使用事务 摘要:本文主要学习了如何在JDBC里使用事务. 使用Connection的事务控制方法 当JDBC程序向数据库获得一个Connection对象时,默认情况下 ...

  8. JDBC 4.0 开始Java操作数据库不用再使用 Class.forName加载驱动类了

    JDBC 4.0 开始Java操作数据库不用再使用 Class.forName加载驱动类了 代码示例 转自 https://docs.oracle.com/javase/tutorial/jdbc/o ...

  9. java操作数据库出现(][SQLServer 2000 Driver for JDBC]Error establishing socket.)的问题所在即解决办法

    在进行jdbc直接操作数据库时    : 我们需要对该工程进行一次导包(引入"msbase.jar" "mssqlserver.jar" "msuti ...

随机推荐

  1. Java 9 模块化(Modularity)

    JDK9的发布一直在推迟,终于在2017年9月21日发布了.下面是JDK9的几个下载地址: JDK9.0.1 Windows-x64下载地址 Oracle Java 官网下载地址 OpenJDK 9官 ...

  2. AS3 - 数组元素乱序方法以及效率比较

    http://www.hangge.com/blog/cache/detail_453.html

  3. Jquery无缝轮播图的制作

    轮播是html页面中比较常见的一种展现形式,也是基础,把轮播图做好,是排版中比较关键的 1.首先是轮播的html元素放置:做轮播之前,要有一个初步的认识 2.每个元素的位置怎样摆放,也是很关键的,这里 ...

  4. mongodb基础学习6-用户管理

    下面来说一下用户管理,前面对mongodb进行操作都无需用户名密码进行登陆,可以设置用户进行数据库的访问 添加用户:三个参数:用户名,密码,是否只读 开启权限验证 进行验证 修改密码 删除用户 用户角 ...

  5. linux配置裸设备

    1.什么裸设备?字符设备?块设备? 裸设备:也叫裸分区(原始分区),是一种没有经过格式化,不被Unix/Linux通过文件系统来读取的特殊字符设备.它由应用程序负责对它进行读写操作.不经过文件系统的缓 ...

  6. 转载 JS组件Bootstrap Select2使用方法详解

    JS组件Bootstrap Select2使用方法详解 作者:懒得安分 字体:[增加 减小] 类型:转载 时间:2016-01-26我要评论 这篇文章主要为大家介绍了JS组件Bootstrap Sel ...

  7. 使用css技术代替传统的frame技术

    http://www.dynamicdrive.com/style/layouts/item/css-left-frame-layout/ <!--Force IE6 into quirks m ...

  8. spring 3.x + hibernate4.x 实现数据延迟加载

      Spring为我们解决Hibernate的Session的关闭与开启问题. Hibernate 允许对关联对象.属性进行延迟加载,但是必须保证延迟加载的操作限于同一个 Hibernate Sess ...

  9. 树莓派 Zero W+温度传感器DS18B20

    树莓派 Zero W+温度传感器DS18B20 作者:陈拓chentuo@ms.xab.ac.cn 2018.05.28/2018.06.01 0.  概述 用树莓派 Zero W读取DS18B20温 ...

  10. distinct top執行順序

    select distinct top 3 from table; 先distinct后top