diaoyudao 发表于 2018-10-23 07:57:19

java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp小结

  final SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.US);//dd/MM/yyyy
  final Date now = new Date();
  System.out.println(now);
  final String strDate = sdfDate.format(now);
  System.out.println(strDate);
  final Timestamp currentEndTS = Timestamp.valueOf(strDate);
  System.out.println(currentEndTS);
  =============================================
  java.lang.Object
  ....|__java.util.Date
  ..........|__java.sql.Date/java.sql.Timestamp /java.sql.Time
  【父类】java.util.Date日期格式为:年月日时分秒
  【子类】java.sql.Date日期格式为:年月日[只存储日期数据不存储时间数据]
  【子类】java.sql.Time日期格式为:时分秒
  【子类】java.sql.Timestamp日期格式为:年月日时分秒纳秒(毫微秒)
  针对不同的数据库选用不同的日期类型
  ·Oracle的Date类型,只需要年月日,选择使用java.sql.Date类型
  ·MS Sqlserver数据库的DateTime类型,需要年月日时分秒,选择java.sql.Timestamp类型
  ------------------------------------------
  四种对象内部均使用系统时间作为标准数据
  ·系统时间:自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数,即格林尼治标准时间(GMT)
  ·本地时间:根据时区不同打印出来的时间[当时区为GMT+0时,系统时间与本地时间相同]
  我们使用的是以本地时间为参考标准的
  ------------------------------------------
  生成日期对象
  方法一:
  除了父类,三个子类均可通过给其发送valueOf()消息,生成所需格式的对象。
  java.sql.Date sqlDate = java.sql.Date.valueOf("2010-08-20");
  java.sql.Time time = java.sql.Time.valueOf("13:44:53");
  java.sql.Timestamp time = java.sql.Timestamp.valueOf("2010-08-20 14:06:27.186");
  方法二:
  ·java.util.Date——>java.sql.Date
  new java.sql.Date(new java.util.Date().getTime());
  new java.util.Date(new java.sql.Date().getTime());//此处IDE报错
  ·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,然后再转换成所需的格式
  Calendar
  Calendar calendar=Calendar.getInstance();
  //获得当前时间,声明时间变量
  int year = calendar.get(Calendar.YEAR);
  int month = calendar.get(Calendar.MONTH);
  month = month+1; //
  int date = calendar.get(Calendar.DATE);
  String today = ""+year+"-"+month+"-"+date+"";
  ..................................
  String to Date
  String to Time
  ..................................
  DateFormat dateFormat;
  dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
  //dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss.SSS", Locale.ENGLISH);//设定格式
  dateFormat.setLenient(false);
  java.util.Date timeDate = dateFormat.parse(dateString);//util类型
  java.sql.Date dateTime = new java.sql.Date(timeDate.getTime());//sql类型
  // java.sql.Timestamp dateTime = new java.sql.Timestamp
  (timeDate.getTime());//Timestamp类型
  Java代码 http://newleague.iteye.com/images/icon_copy.gif

[*]  public class DateTest{
[*]  public static void main(String[] args) throws ParseException{
[*]  try{
[*]  String dateString = "2010-08-20 12:00:00.125";
[*]  DateFormat dateFormat;
[*]  dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss.SSS",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型
[*]  System.out.println(dateTime);
[*]  }catch(Exception ex){
[*]  ex.printStackTrace();
[*]  }
[*]  }
[*]  }
  ================================================================
  1.1 String -> Date
  Java代码 http://yunnick.iteye.com/images/icon_copy.gif http://yunnick.iteye.com/images/icon_star.pnghttp://yunnick.iteye.com/images/spinner.gif

[*]  String dateStr = "2010/05/04 12:34:23";
[*]  Date date = new Date();
[*]  //注意format的格式要与日期String的格式相匹配
[*]  DateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
[*]  try {
[*]  date = sdf.parse(dateStr);
[*]  System.out.println(date.toString());
[*]  } catch (Exception e) {
[*]  e.printStackTrace();
[*]  }
String dateStr = "2010/05/04 12:34:23";  Date date = new Date();
  //注意format的格式要与日期String的格式相匹配
  DateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
  try {
  date = sdf.parse(dateStr);
  System.out.println(date.toString());
  } catch (Exception e) {
  e.printStackTrace();
  }
  1.2 Date -> String
  日期向字符串转换,可以设置任意的转换格式format
  Java代码 http://yunnick.iteye.com/images/icon_copy.gif http://yunnick.iteye.com/images/icon_star.pnghttp://yunnick.iteye.com/images/spinner.gif

[*]  String dateStr = "";
[*]  Date date = new Date();
[*]  //format的格式可以任意
[*]  DateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
[*]  DateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH/mm/ss");
[*]  try {
[*]  dateStr = sdf.format(date);
[*]  System.out.println(dateStr);
[*]  dateStr = sdf2.format(date);
[*]  System.out.println(dateStr);
[*]  } catch (Exception e) {
[*]  e.printStackTrace();
[*]  }
String dateStr = "";  Date date = new Date();
  //format的格式可以任意
  DateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
  DateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH/mm/ss");
  try {
  dateStr = sdf.format(date);
  System.out.println(dateStr);
  dateStr = sdf2.format(date);
  System.out.println(dateStr);
  } catch (Exception e) {
  e.printStackTrace();
  }
  二、String与Timestamp互转
  2.1 String ->Timestamp
  使用Timestamp的valueOf()方法
  Java代码 http://yunnick.iteye.com/images/icon_copy.gif http://yunnick.iteye.com/images/icon_star.pnghttp://yunnick.iteye.com/images/spinner.gif

[*]  Timestamp ts = new Timestamp(System.currentTimeMillis());
[*]  String tsStr = "2011-05-09 11:49:45";
[*]  try {
[*]  ts = Timestamp.valueOf(tsStr);
[*]  System.out.println(ts);
[*]  } catch (Exception e) {
[*]  e.printStackTrace();
[*]  }
Timestamp ts = new Timestamp(System.currentTimeMillis());  String tsStr = "2011-05-09 11:49:45";
  try {
  ts = Timestamp.valueOf(tsStr);
  System.out.println(ts);
  } catch (Exception e) {
  e.printStackTrace();
  }
  注:String的类型必须形如: yyyy-mm-dd hh:mm:ss[.f...] 这样的格式,中括号表示可选,否则报错!!!
  如果String为其他格式,可考虑重新解析下字符串,再重组~~
  2.2 Timestamp -> String
  使用Timestamp的toString()方法或者借用DateFormat
  Java代码 http://yunnick.iteye.com/images/icon_copy.gif http://yunnick.iteye.com/images/icon_star.pnghttp://yunnick.iteye.com/images/spinner.gif

[*]  Timestamp ts = new Timestamp(System.currentTimeMillis());
[*]  String tsStr = "";
[*]  DateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
[*]  try {
[*]  //方法一
[*]  tsStr = sdf.format(ts);
[*]  System.out.println(tsStr);
[*]  //方法二
[*]  tsStr = ts.toString();
[*]  System.out.println(tsStr);
[*]  } catch (Exception e) {
[*]  e.printStackTrace();
[*]  }
Timestamp ts = new Timestamp(System.currentTimeMillis());  String tsStr = "";
  DateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
  try {
  //方法一
  tsStr = sdf.format(ts);
  System.out.println(tsStr);
  //方法二
  tsStr = ts.toString();
  System.out.println(tsStr);
  } catch (Exception e) {
  e.printStackTrace();
  }
  很容易能够看出来,方法一的优势在于可以灵活的设置字符串的形式。
  三、Date( java.util.Date )和Timestamp互转
  声明:查API可知,Date和Timesta是父子类关系
  3.1 Timestamp -> Date
  Java代码 http://yunnick.iteye.com/images/icon_copy.gif http://yunnick.iteye.com/images/icon_star.pnghttp://yunnick.iteye.com/images/spinner.gif

[*]  Timestamp ts = new Timestamp(System.currentTimeMillis());
[*]  Date date = new Date();
[*]  try {
[*]  date = ts;
[*]  System.out.println(date);
[*]  } catch (Exception e) {
[*]  e.printStackTrace();
[*]  }
Timestamp ts = new Timestamp(System.currentTimeMillis());  Date date = new Date();
  try {
  date = ts;
  System.out.println(date);
  } catch (Exception e) {
  e.printStackTrace();
  }
  很简单,但是此刻date对象指向的实体却是一个Timestamp,即date拥有Date类的方法,但被覆盖的方法的执行实体在Timestamp中。
  3.2 Date -> Timestamp
  父类不能直接向子类转化,可借助中间的String~~~~
  java.sql.Date 只存储日期数据不存储时间数据
  // 会丢失时间数据
  preparedStatement.setDate(1, new java.sql.Date(date.getTime()));
  //可以这样来处理
  preparedStatement.setTimestamp(1, new java.sql.Timestamp(new java.util.Date().getTime()));
  //想要得到完整的数据,包括日期和时间,可以这样
  java.util.Date d = resultSet.getTimestamp(1);
  //这样处理更合适一些,可以避免一些潜在Timestamp 问题
  java.util.Date d = new java.util.Date(resultSet.getTimestamp(1).getTime());
  自己补的话
  这样的话:
  往数据库存储的时候可以接收 java.util.Date类型 再用getTime()方法得到代表那个Date对象的long值,再以这个long值 构造一个Timestamp对象 存进数据库中。
  从存数据库里取的时候,可以先得到Timestamp用他的getTime()方法得到long值,再以这个long值构造一个java.util.Date对象,这样就可以对这个Date对象操作了。不如说 new SimpleTimeFormat("yyyyy-MM-dd HH:mm:ss").format()等等


页: [1]
查看完整版本: java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp小结