Date获取时间
获取当前时间
// 创建了对应当前时间的Date对象 Date date = new Date(); System.out.println(date.toString()); // Sat Dec 21 21:03:39 CST 2019 System.out.println(date.getTime()); // 获取时间戳 1576933656356
时间有当前时间有时间戳模式
getTime()获取当前时间的时间戳 Date date = new Date(); System.out.println(date.getTime()); // 获取时间戳 1576933656356
创建sql-Date, 就是带有详细年月日的模式
// 创建Sql 的Date Date date2 = new java.sql.Date(1576933603968L); System.out.println(date2);
时间戳转化为当前模式调用当前模式的构造器
// 创建指定毫秒数的对象 Date date1 = new Date(1576933603968L); System.out.println(date1.toString()); // Sat Dec 21 21:06:43 CST 2019
util.Date 与sql.Date 的相互转化
util.Date ---> sql.Date
// 如何将util.Date转化为 sql.Date // 情况一: Date date3 = new java.sql.Date(1576933603968L); Date date4 = (java.util.Date) date3; //情况二: Date date5 = new Date(); java.sql.Date date6 = (java.sql.Date) date5;
sql.Date ----> util.Date
需要调用sql.Date的getTime将其转化为时间戳才能转化为util.Date
Date date1 = new Date(); java.sql.Date sqlDate = new java.sql.Date(date1.getTime()); System.out.println(sqlDate); // 2020-01-06 Date date2 = new Date(sqlDate.getTime()); // Mon Jan 06 14:55:15 CST 2020
SimpleDateFormat
SimpleDateFormat 两种方式 格式化: 日期 ---》 String 解析 String ---》 Date
public class SimpleDateFormatTwo { public static void main(String[] args) { Date date = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String strDate = simpleDateFormat.format(date); System.out.println(strDate); try { Date dateStr = simpleDateFormat.parse(strDate); // 解析 : String --- 》 Date System.out.println(dateStr); } catch (Exception e) { e.printStackTrace(); } String strDateOne = "2018-06-07 11:22:63"; SimpleDF simpleDF = new SimpleDF(); simpleDF.getStrDate(strDateOne); Date date1 = new Date(); java.sql.Date sqlDate = new java.sql.Date(date1.getTime()); System.out.println(sqlDate); // 2020-01-06 Date date2 = new Date(sqlDate.getTime()); // Mon Jan 06 14:55:15 CST 2020 System.out.println(date2); Date date3 = new Date(); Date date4 = sqlDate; System.out.println(date4); } }
在解析的时候 使用parse必须使用try来修饰
// 把日期 2020-01-06 10:33:02 转为sql,Date
class SimpleDF{ public Date getStrDate(String str){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); if(str != null){ try{ Date date = sdf.parse(str); if(date != null){ java.sql.Date dateOne = new java.sql.Date(date.getTime()); return dateOne; } }catch (Exception e){ e.printStackTrace(); } } return null; } }
Calendar 日历类
Calendar是一个抽象基类,主用用于完成日期字段之间相互操作的功能。
Calendar的实现需要调用本身的getIstance()方法来实现
Calendar c1 = Calendar.getInstance();
Calendar的方法
Calendar c1 = Calendar.getInstance(); // set设置时间 c1.set(2019,11,13); System.out.println(c1.getTime()); // 获取时间 Fri Dec 13 20:14:42 CST 2019 // get 获取时间 需要由Calendar这个类本身来获取 System.out.println(c1.get(Calendar.DAY_OF_MONTH)); // 13 获取天数为当月的第几天 System.out.println(c1.get(Calendar.DATE)); // 13 获取天 System.out.println(c1.get(Calendar.MONTH)); // 11 获取月 //add()对时间增加或者减少 c1.add(Calendar.YEAR,1); // 把年增加1 System.out.println(c1.get(Calendar.YEAR)); // 2020 c1.add(Calendar.YEAR, -1); // 减少一年 System.out.println(c1.get(Calendar.YEAR)); // 获取年 2019 // 获取日历类时间的当前时间Date System.out.println(c1.getTime()); // Fri Dec 13 20:21:21 CST 2019 // Date ----> Calendar Date date = new Date(); // 当前时间 c1.setTime(date); System.out.println(c1.get(Calendar.YEAR)); // 2020 时间因为上面的修改已经被修改为当前时间了
可以看到这个时间是随着我们的修改而可以随时修改的
注意:
获取月份时:一月是0,二月是1,以此类推,12月是11
获取星期时:周日是1,周二是2 , 。。。。周六是7
以上是jdk8之前的Date 下面是jdk8之后的Date
之前的时间api都有一些不好的特性
可变性:可以随时修改 修改后获取的时间就随之改变了 像时间这类是不应该 被修改的
偏移性:Date中的年份是从1900开始的,而月份都从0开始。
格式化:格式化只对Date有用,Calendar则不行。
此外,它们也不是线程安全的;不能处理闰秒等。
java8新Date API
LocalDate LocalTime LocalDateTime
LocalDate: 本地日期 只能获取某年某月某日
LocalTime 本地时间 只能获取某小时某分某秒 表示的是时间不是日期
LocalDateTime 本地日期时间
LocalDate代表IOS格式(yyyy-MM-dd)的日期,可以存储 生日、纪念日等日期。
LocalTime表示一个时间,而不是日期。
LocalDateTime是用来表示日期和时间的,这是一个最常用的类之一。
操作方法
// 实例化都是调用now LocalDate localDate = LocalDate.now(); LocalTime localTime = LocalTime.now(); LocalDateTime localDateTime = LocalDateTime.now(); System.out.println(localDate); // 2020-01-06 System.out.println(localTime); // 20:44:15.991 System.out.println(localDateTime); // 2020-01-06T20:44:15.991 // 设置时间 此处可以看到不可变性 虽然设置了时间但是本身的还是不变 System.out.println(localDate.of(2019,12,23)); // 2019-12-23 System.out.println(localDate); // 此时获取的时间还是当前时间 2020-01-06 System.out.println(localTime.of(11, 22)); // 11:22 System.out.println(localTime); // 20:46:54.321 System.out.println(localDateTime.of(2018, 11, 11, 13, 24)); // 2018-11-11T13:24 System.out.println(localDateTime); // 当前时间仍是不变 2020-01-06T20:47:40.502 // System.out.println(localDateTime.getDayOfMonth()); // 获取当前时间是这个月的第几天 System.out.println(localDateTime.getDayOfWeek()); // 获取是星期几 MONDAY System.out.println(localDateTime.getMonth()); // 获取月份JANUARY //with 将时间修改为新的时间并返回新的值 System.out.println(localDateTime.withDayOfMonth(12)); // 2020-01-12T20:58:35.993 System.out.println(localDateTime.withMonth(6)); // 设置月份 2020-06-06T21:03:45.020 // plus 添加 System.out.println(localDateTime.plusMonths(4)); //当前时间增加4个月 System.out.println(localDateTime.plusHours(11)); // 当前时间增加11小时 // minus 减去 System.out.println(localDateTime.minusHours(3)); // 当前时间减去3小时 System.out.println(localDateTime.minusDays(2)); // 当前时间减去2天