1.获取时间
关于date 有以下获取时间的方式:
java.util.Date date= new java.util.Date(); System.out.println(date); java.util.Calendar date4 = java.util.Calendar.getInstance(); System.out.println(date4);//date4是对象,可以用date.得到时间方法 //sql语句用 java.sql.Date date1 = new java.sql.Date(new java.util.Date().getTime()); System.out.println(date1); java.sql.Timestamp date2 = new java.sql.Timestamp(new java.util.Date().getTime()); System.out.println(date2); java.sql.Time date3 = new java.sql.Time(new java.util.Date().getTime()); System.out.println(date3);
总结:使用Calendar 获取年,时,分,秒等更简单。但是获取日期是重0开始的。
2.Date的格式化
格式化使用SimpleDateFormat
// Date转String java.text.SimpleDateFormat f = new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); System.out.println("Date转String:"+f.format(date4.getTime())); // String转Date Date date5 = null; try { date5 = f.parse("2018-01-22 08:31:28"); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.print("String转Date:"+date5);
注意:
SimpleDateFormat 不是线程安全的。
解决方法:
1.创建新实例。
2.使用synchronized关键字。
private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public static String formatDate(Date date)throws ParseException{ synchronized(sdf){ return sdf.format(date); } }
3.使用ThreadLocal。
3.计算差值
计算差值有两种方式
1.获获取毫秒数,然后换成天数。
Long date6 = date.getTime() - date5.getTime(); System.out.println(date6 /(1000 * 24 * 60 * 60));
2.用Calendar 类获取年月日进行计算,先获得时分秒。然后两个日期按照逻辑计算,获得的时分秒为int类型。
java.util.Calendar date7 = java.util.Calendar.getInstance(); java.util.Calendar date8 = java.util.Calendar.getInstance(); System.out.println(date7.get(Calendar.YEAR)); System.out.println(date7.get(Calendar.MONTH)); System.out.println(date7.get(Calendar.DAY_OF_MONTH)); System.out.println(date7.get(Calendar.HOUR)); //可以把其他时间类型转为Calendar 类型 date8.setTime(date5); System.out.println(date8.get(Calendar.MONTH));
3.计算某日期X年X月X日后的日期。
date7.add(Calendar.DAY_OF_MONTH, 20); System.out.println(date7.getTime());