1.System類中的currentTimeMillis()
返回當前時間與1970年1月1日0時0分0秒之間以毫秒爲單位的時間差,簡稱時間戳。
@Test
public void test1(){
long time = System.currentTimeMillis();
//返回時間戳
System.out.println(time);
}
2.java.util.Date類
|---java.sql.Date類
1.兩個構造器的使用
>構造器一:Date():創建一個對應當前時間的Date對象
>構造器二:創建指定毫秒數的Date對象
2.兩個方法的使用
>toString():顯示當前的年、月、日、時、分、秒
>getTime():獲取當前Date對象對應的毫秒數。(時間戳)
@Test
public void test2(){
//構造器一:Date():創建一個對應當前時間的Date對象
Date date1 = new Date();
System.out.println(date1.toString());//Sat Feb 16 16:35:31 GMT+08:00 2019
System.out.println(date1.getTime());//1550306204104
//構造器二:創建指定毫秒數的Date對象
Date date2 = new Date(1550306204104L);
System.out.println(date2.toString());
}
3. java.sql.Date類
是.java.util.Date類 的子類。更多的用在數據庫這一塊。對應着數據庫中的日期類型的變量,
>如何實例化
>如何將java.util.Date對象轉換爲java.sql.Date對象
@Test
public void test3(){
//創建java.sql.Date對象
java.sql.Date date3 = new java.sql.Date(35235325345L);
System.out.println(date3);//1971-02-13
//如何將java.util.Date對象轉換爲java.sql.Date對象
//情況一:子類轉父類的,然後強轉回子類
Date date4 = new java.sql.Date(2343243242323L);
java.sql.Date date5 = (java.sql.Date) date4;
//情況二:拿到父類生成的時間戳,放入子類構造器中
Date date6 = new Date();
java.sql.Date date7 = new java.sql.Date(date6.getTime());
}
4.SimpleDateFormat 是對時間顯示的格式進行調整的類。
SimpleDateFormat對日期Date類的格式化和解析,主體是兩個操作:
1.1 格式化:日期 --->字符串
1.2 解析:格式化的逆過程,字符串 ---> 日期
2.SimpleDateFormat的實例化,重載的構造器,填入你想要的時間格式,輸入對應時間。
@Test
public void testSimpleDateFormat() throws ParseException {
//實例化SimpleDateFormat:使用默認的構造器
SimpleDateFormat sdf = new SimpleDateFormat();
//格式化:日期 --->字符串
Date date = new Date();
System.out.println(date);
String format = sdf.format(date);
System.out.println(format);
//解析:格式化的逆過程,字符串 ---> 日期
String str = "19-12-18 上午11:43";
Date date1 = sdf.parse(str);
System.out.println(date1);
//*************按照指定的方式格式化和解析:調用帶參的構造器*****************
// SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyy.MMMMM.dd GGG hh:mm aaa");
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//格式化
String format1 = sdf1.format(date);
System.out.println(format1);//2019-02-18 11:48:27
//解析:要求字符串必須是符合SimpleDateFormat識別的格式(通過構造器參數體現),
//否則,拋異常
Date date2 = sdf1.parse("2020-02-18 11:48:27");
System.out.println(date2);
}
5.java.util.Calendar 類,相當時間的操作類,對日期進行增刪改查。
原本Date類中就有增刪改查操作,但其中的方法都被廢棄的。替代的是jdk1.1的Calendar 類。
首先Calendar類是一個抽象類,實例化可以調用其靜態方法Calender.getInstance();返回的是其子類 GregorianCalender.
@Test
public void testCalendar(){
//1.實例化
//方式一:創建其子類(GregorianCalendar)的對象
//方式二:調用其靜態方法getInstance()
Calendar calendar = Calendar.getInstance();
// System.out.println(calendar.getClass());
//2.常用方法
//get()
int days = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(days);
System.out.println(calendar.get(Calendar.DAY_OF_YEAR));
//set()
//calendar可變性
calendar.set(Calendar.DAY_OF_MONTH,22);
days = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(days);
//add()
calendar.add(Calendar.DAY_OF_MONTH,-3);
days = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(days);
//getTime():日曆類---> Date
Date date = calendar.getTime();
System.out.println(date);
//setTime():Date ---> 日曆類
Date date1 = new Date();
calendar.setTime(date1);
days = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(days);
}
6. 就以jdk8之前上類,很難滿足我們程序員對時間表達的需求。比如希望時間跟晝夜和四季有關等。
就以上類,還面臨的問題有:
1.偏移性:Date中的年份是從1900開始的,而月份都是從0開始的。
2.格式化:格式化只對Date有用,Calendar則不行。時間各個類表示不同的操作,表現出它的複雜性了。
3.可變性:像日期和時間這樣的類應該是不可變的。
4.她們不是線程安全的,不能處理閏秒等等......
他們都是說,對日期和時間的操作一直都是Java程序員最痛苦的地方之一
所以引入了jdk8中新日期時間的API
java.time基礎包
java.time.format格式解釋包
java.time.chrono 對不同日曆系統訪問包
java.time.temporal 包括底層框架和擴展特性包
java.time.zone 包含時區支持類的包
說明一下:大多數開發者只會用到基礎包和format包。因此,儘管更新了68公開類型,大多數開發着,大概只用到了其中的三分之一。
如:java.time.LocalDateTime,java.time.LocalDate,java.time.LocalTime;等等
一個程序員的自我修養和成長........