Java的日期相关类
java.util.Date 类中提供了与系统无关的用于处理日期与时间的封装
import java.util.Date; public class Test { public static void main(String[] args) { // 1.无参:获取目前时间 Date date = new Date(); System.out.println(date); // Thu Apr 07 21:32:26 CST 2022 // 2.有参:获取 1970-1-1 08:00:00 + 参数(毫秒值) Date date1 = new Date(1000*60*60*8); // 比如:加8小时 System.out.println(date1); // Thu Jan 01 16:00:00 CST 1970 } }
获取当前日期距离1970-1-1 00:00:00 经过的毫秒数
//1.Date相关的Api Date date = new Date(); long time = date.getTime(); System.out.println(time); // 1649338949710 //2.系统自带的Api long millis = System.currentTimeMillis(); System.out.println(millis); // 1649338949710
格式化:将当前时间对象转为指定格式展示:Date -> String
Date date = new Date();//获取当前时间 //自定义格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日"); String format = sdf.format(date); System.out.println(format); // 2022-04-07 22:01:55 System.out.println(sdf1.format(date)); // 2022年04月07日
解析:将当前的日期字符串转为Date对象:String -> Date
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class Test { public static void main(String[] args) throws ParseException { Date date = new Date();//获取当前时间 //自定义格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日"); //sdf -> sdf,解析对应 String format = sdf.format(date); Date parse = sdf.parse(format); // Fri Apr 08 15:39:18 CST 2022 System.out.println(parse); //sdf1 -> sdf,解析不对应,报错!!! // Date parse1 = sdf1.parse(sdf.format(date)); // System.out.println(parse1); } }
--------------------------------------------------------------------------
上面Date 类想任意获取具体某一时间点很不易,而下面的Calendar 类正好解决这个问题!!!
java.util.Calendar 日历类,帮助Date类快速地设置和改变时间,完成时间的计算
Calendar 类是一个抽象类,它为特定时刻与一组诸如 YEAR
、MONTH
、DAY_OF_MONTH
、HOUR
等日历字段
之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。时刻可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000)的偏移量。
转换:将Date对象的时间作为Calendar的时间:Date -> Calendar
import java.util.Calendar; import java.util.Date; public class Test { public static void main(String[] args) { //1.创建当前系统时间的Calendar对象 //抽象类,不能直接new -> getInstance()该静态方法的返回值,就是该抽象类的子类对象GregorianCalendar Calendar calendar = Calendar.getInstance(); //Date -> Calendar Date date = new Date(); calendar.setTime(date); System.out.println(calendar);//java.util.GregorianCalendar[time=1649406453724,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=29,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2022,MONTH=3,WEEK_OF_YEAR=15,WEEK_OF_MONTH=2,DAY_OF_MONTH=8,DAY_OF_YEAR=98,DAY_OF_WEEK=6,DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=4,HOUR_OF_DAY=16,MINUTE=27,SECOND=33,MILLISECOND=724,ZONE_OFFSET=28800000,DST_OFFSET=0] } }
转换:Calendar -> Date
//创建当前系统时间的Calendar对象 Calendar calendar = Calendar.getInstance(); // Calendar -> Date Date date1 = calendar.getTime(); System.out.println(date1); //Fri Apr 08 16:30:06 CST 2022
Calendar 相关的Api
import java.util.Calendar; import java.util.Date; public class Test { public static void main(String[] args) { //创建当前系统时间的Calendar对象 Calendar calendar = Calendar.getInstance(); //1、set(int xxx, ...) 设置日历字段的值 calendar.set(1999,01,26,15,20,30); Date date2 = calendar.getTime(); System.out.println(date2); //Fri Feb 26 15:20:30 CST 1999 //2、get(Calendar.XXX) 获取单个字段值 int year = calendar.get(Calendar.YEAR); System.out.println(year); //1999 int month = calendar.get(Calendar.MONTH); System.out.println(month); //1 System.out.println(calendar.get(Calendar.DAY_OF_MONTH));//26 //3、add(Calendar.XXX , int amount) 时间偏移 calendar.add(Calendar.YEAR,-2);//年份-2 int year1 = calendar.get(Calendar.YEAR); System.out.println(year1); //1997 calendar.add(Calendar.MONTH,2);//月份+2 calendar.add(Calendar.DAY_OF_MONTH,-3);// } }