java8之前_Java 8 之前的时间处理
最近在自己瞎折騰,有一個需求是計算當前日期到指定日期有多少天,用于實現紀念日或倒計時的功能。查閱資料后發現Java 8之前的時間日期處理很是麻煩而且被頻頻吐槽,以至于后來在 Java 8 中推出了一個專門的 time 包。雖然學習編程最忌守舊,但是老版本的處理方式在 Java 8 或以上版本中并沒有廢除并且還有很多項目仍在使用,所以我們還是很有必要學習老版本的 api。
日歷類Calendar
Calendar是一個使用單例設計模式的抽象類,封裝了如YEAR、MONTH、DATE、SUNDAY(一個星期的七天)和JANUARY(一年的十二個月)等諸多日歷字段,并提供了一些操作字段的方法。
構造方法
Calendar是典型的單例設計模式,構造函數不對外暴露,使用getInstance()方法獲得日歷對象。
static Calendar getInstance(); 使用默認時區和語言環境獲得一個日歷,此外還有多個重載用于獲得指定語言環境、時區下的日歷對象。
主要方法
get
int get(int field); 返回給定日歷字段的值
Calendar cal = Calendar.getInstance();
//調用get函數獲取日歷對象的年、月、日字段
//get函數傳入的參數為Calendar封裝好的字段
String days = cal.get(Calendar.YEAR)+"年"
+cal.get(Calendar.MONTH)+"月"+cal.get(Calendar.DATE)+"日";
//輸出檢驗
System.out.println("今天是:");
System.out.println(days);
set
void set(int field, int value); 將給定的日歷字段設置為給定值
void set還有諸如set(int year, int month, int date)等多個重載用于設定日歷字段
cal.set(Calendar.YEAR,2017);//將cal對象表示的時間的年份設置為2017年
cal.set(2017,Calendar.FEBRUARY,24);//將cal對象表示的時間設置為2017年2月24日
//可以將這兩句代碼分別插入上一段的1、2行之間進行測試
//值得一提的是,Calendar類中將一月JANUARY字段的值定義為0,FEBRUARY的值定義為1
//所以在set函數的參數中使用月份時整數0表示1月,1表示二月并以此類推
//推薦使用Calendar.FEBRUARY等字段以提高代碼可讀性
add
void add(int field, int amount); 根據日歷的規則,為給定的日歷字段添加或減去指定的時間量。
Calendar cal = Calendar.getInstance();
//調用get函數獲取日歷對象的年、月、日字段
//get函數傳入的參數為Calendar封裝好的字段
String days = cal.get(Calendar.YEAR)+"年"
+cal.get(Calendar.MONTH)+"月"+cal.get(Calendar.DATE)+"日";
//輸出檢驗
System.out.println("今天是:");
System.out.println(days);
cal.add(Calendar.MONTH,1);
String nextMonth = cal.get(Calendar.YEAR)+"年"
+cal.get(Calendar.MONTH)+"月"+cal.get(Calendar.DATE)+"日";
System.out.println("一個月后是:");
System.out.println(nextMonth);
其他方法
long getTimeInMillis(); 返回此 Calendar 的時間值,以毫秒為單位。
日期類Date
Date類是自Java誕生就有的類,也是少數槽點較多的類之一,自Calendar誕生后Date中大多數方法都被取代,但是要使用日期格式化類按要求獲取日期和時間,Date類還是必不可少的。
構造方法
Date(); 分配 Date 對象并初始化此對象,以表示分配它的時間(精確到毫秒)
Date(long time); 分配Date對象并初始化此對象,以表示自從協調世界時以來的指定的毫秒數
主要方法
boolean after(Date when); 測試此日期是否在指定日期之后
boolean before(Date when); 測試此日期是否在指定日期之前
long getTime(); 返回此 Date對象對協調世界時相差的毫秒數
Date parse(String text); 根據指定的字符串生成一個Date對象
Date nowdays = new Date();
System.out.println(nowdays);
//輸出結果為Tue Feb 13 11:18:33 CST 2018
//先用Calendar獲取一個指定時間的毫秒值
Calendar calendar = Calendar.getInstance();
calendar.set(2017,Calendar.FEBRUARY,24,0,0,0);
//用指定日期的毫秒值初始化Date對象并輸出檢驗
Date day = new Date(calendar.getTimeInMillis());
System.out.println(day);
//輸出結果Fri Feb 24 00:00:00 CST 2017
日期格式化類
Java作為當前最火熱的編程語言之一,在日期時間處理的功能上必定要考慮到不同時區、不同習慣導致的語言和習慣差別。為了解決這個問題,在java.text包中提供了DateFormat和SimpleDateFormat兩個類。
DateFormat
DateFormat用于根據要求格式化或標準化日期和時間對象,其提供了多個類似的方法以獲得基于默認或給定語言環境和多種格式化風格的默認日期/時間 Formatter。使用DateFormat時一般先獲取到格式化器,然后通過format方法傳入Date對象將數據格式化為字符串。
獲取格式化器
static DateFormat getDateInstance(); 獲取默認情況下格式化日期的實例對象
static DateFormat getTimeInstance(); 獲取默認情況下格式化時間的實例對象
static DateFormat getDateTimeInstance(); 獲取默認情況下格式化日期和時間的實例對象
以上前兩個個方法還分別有單個參數的(指定風格)、兩個參數的(指定風格和語言環境)的重載;第三個方法還有兩個參數(指定風格)、三個參數(指定風格和語言環境)的重載;所以DateFormat共有九個方法可以獲取格式化器
格式化Date對象
String format(Date date); 將一個 Date 格式化為日期/時間字符串
Date date = new Date();
DateFormat df = null;
//默認風格的日期格式化器
df = DateFormat.getDateInstance();
System.out.println(df.format(date));
//SHORT風格的日期格式化器
df = DateFormat.getDateInstance(DateFormat.SHORT);
System.out.println(df.format(date));
//兩次輸出結果
//2018年2月13日
//2018/2/13
Date date = new Date();
DateFormat df = null;
//默認風格的時間格式化器(中文、中國風格)
df = DateFormat.getTimeInstance();
System.out.println(df.format(date));
//美式英語、美國風格的日期格式化器
df = DateFormat.getTimeInstance(DateFormat.SHORT,new Locale("en_us","as"));
System.out.println(df.format(date));
//兩次輸出結果
//下午12:12:44
//12:12:44 CST
SimpleDateFormat
顧名思義,SimpleDateFormat是一個很簡便的日期格式化類。它是DateFormat的子類,重寫了format方法,使用時可以通過獲取格式化器對象,此格式化器對象用正則表達式的方式格式化文本。
構造方法
SimpleDateFormat(); 用默認的模式和默認語言環境的日期格式符號構造格式化器
SimpleDateFormat(String pattern); 用給定的模式構造格式化器
其他方法
String format(Date date); 將一個 Date 格式化為日期/時間字符串
Date date = new Date();
SimpleDateFormat sdf = null;
sdf = new SimpleDateFormat("yyyy年MM月dd日hh時mm分");
System.out.println(sdf.format(date));
//輸出結果
//2018年02月13日12時53分
sdf = new SimpleDateFormat("yyyy/MM/dd");
System.out.println(sdf.format(date));
//輸出結果
//2018/02/13
正則規則
SimpleDateFormat是利用正則表達式來格式化日期的,在文檔中將其稱之為“模式字母”,在常用的模式字母中,除月份用M分鐘用m外其他皆為小寫的單詞首字母。
總結
以上是生活随笔為你收集整理的java8之前_Java 8 之前的时间处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 二维数组作为参数传递_java
- 下一篇: java map string stu_