设为首页 收藏本站
查看: 1282|回复: 0

[经验分享] java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp小结

[复制链接]

尚未签到

发表于 2018-10-23 07:57:19 | 显示全部楼层 |阅读模式
  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; //[0,11]
  int date = calendar.get(Calendar.DATE);
  String today = ""+year+"-"+month+"-"+date+"";
  ..................................
  String to Date[java.sql.Date]
  String to Time[java.sql.Timestamp]
  ..................................
  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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-625165-1-1.html 上篇帖子: mysql的sql语句优化 下篇帖子: SQL的主键和外键的作用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表