導(dǎo)語
最重要的就是使用SimpleDateFormat類進(jìn)行日期格式的轉(zhuǎn)換。
主要內(nèi)容
- Date類的使用
- SimpleDateFormat類的使用
- Calendar類的使用
具體內(nèi)容
Date類
在之前一直在編寫簡(jiǎn)單Java類孙援,但是所編寫的數(shù)據(jù)表與簡(jiǎn)單Java類的轉(zhuǎn)換里面缺少了Date數(shù)據(jù)類型帆卓,所以本部分就屬于簡(jiǎn)單Java類的最后的拼版腋舌。
在Java里面提供有一個(gè)java.util.Date的類塔嬉,它直接就表示當(dāng)前的日期時(shí)間阳惹。
范例:取得當(dāng)前的日期時(shí)間
import java.util.Date;
public class TestDemo {
public static void main(String args[]) {
Date date = new Date();
System.out.println(date); // 輸出對(duì)象信息
}
}
輸出結(jié)果
Sat Sep 30 22:26:23 CST 2017
這個(gè)時(shí)候的確輸出了當(dāng)前的日期時(shí)間钱烟,只不過這個(gè)格式實(shí)在是難看晰筛。
一直以來強(qiáng)調(diào)過一個(gè)概念:long可以描述出日期時(shí)間數(shù)據(jù),那么這一點(diǎn)在Date類的方法上也是可以看見的拴袭,在Date類里面定義了如下的幾個(gè)重要方法:
- 無參構(gòu)造:public Date()读第。
- 有參構(gòu)造:public Date(long date)。
- 轉(zhuǎn)換為long型:public long getTime()拥刻。
范例:Date與long之間轉(zhuǎn)換
public class TestDemo {
public static void main(String args[]) {
long cur = System.currentTimeMillis();
Date date = new Date(cur);
System.out.println(date);
System.out.println(date.getTime());
}
}
輸出結(jié)果
Sat Sep 30 22:36:23 CST 2017
1506782205
以后的代碼編寫過程之中怜瞒,依然需要以上的轉(zhuǎn)換操作,尤其是getTime()方法泰佳。
日期格式化:SimpleDateFormat
java.text是一個(gè)專門實(shí)現(xiàn)國(guó)際化程序的開發(fā)包盼砍,而SimpleDateFormat是一個(gè)專門處理格式化日期的工具類,可以將Date型的對(duì)象轉(zhuǎn)換為String型的形式顯示逝她。而主要使用的是以下方法:
- 構(gòu)造方法:public SimpleDateFormat(String pattem)浇坐,需要傳遞轉(zhuǎn)換格式。
- 將Date轉(zhuǎn)換為String:public final String format(Date date)黔宛。
- 將String轉(zhuǎn)換為Date:public Date parse(String source) throws ParseException近刘。
現(xiàn)在的關(guān)鍵就在于轉(zhuǎn)換格式上,對(duì)于常見的轉(zhuǎn)換單位:年(yyyy)、月(MM)觉渴、日(dd)介劫、時(shí)(HH)、分(mm)案淋、秒(ss)座韵、毫秒(SSS)。
范例:將日期格式化顯示(Date型數(shù)據(jù)變?yōu)镾tring型數(shù)據(jù))
import java.text.SimpleDateFormat;
import java.util.Date;
public class TestDemo {
public static void main(String args[]) {
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
String str = sdf.format(date); // 將Date型變?yōu)榱薙tring型
System.out.println(str);
}
}
輸出結(jié)果
2017-09-30 22:50:29.312
除了可以將日期變?yōu)樽址馓呔部梢詫⒆址D(zhuǎn)換為日期誉碴。
范例:將字符串轉(zhuǎn)換為日期
public class TestDemo {
public static void main(String args[]) throws Exception {
String str = "2011-11-11 11:11:11.111";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
Date date = sdf.parse(str); // 將字符串變?yōu)槿掌谛蛿?shù)據(jù)
System.out.println(date);
}
}
輸出結(jié)果
Fri Nov 11 11:11:11 CST 2011
在將字符串變?yōu)槿掌谛蛿?shù)據(jù)的時(shí)候,如果日期型數(shù)據(jù)給出的月不對(duì)瓣距,那么會(huì)自動(dòng)進(jìn)行進(jìn)位黔帕。如果給定的字符串與要轉(zhuǎn)換的格式不符合,那么就會(huì)出現(xiàn)異常蹈丸。
Calendar類
Date類和SimpleDate類兩個(gè)往往是一起使用的成黄,但是Calendar這個(gè)類主要是進(jìn)行一些簡(jiǎn)單的日期計(jì)算的。
Calender類定義:
public abstract class Calendar
extends Object
implements Serializable, Cloneable, Comparable<Calendar>
這是一個(gè)抽象類逻杖,那么應(yīng)該依靠子類進(jìn)行對(duì)象的實(shí)例化操作奋岁。但是在這個(gè)類里面它提供有一個(gè)static方法,此方法返回的正是本類對(duì)象:public static Calendar getInstance()荸百。
范例:取得當(dāng)前日期時(shí)間
import java.util.Calendar;
public class TestDemo {
public static void main(String args[]) {
Calendar cal = Calendar.getInstance(); // 取得本類對(duì)象
StringBuffer buf = new StringBuffer();
buf.append(cal.get(Calendar.YEAR)).append("-");
buf.append(cal.get(Calendar.MONTH) + 1).append("-"); // 這個(gè)從0開始算
buf.append(cal.get(Calendar.DAY_OF_MONTH)).append(" ");
buf.append(cal.get(Calendar. HOUR_OF_DAY)).append(":");
buf.append(cal.get(Calendar.MINUTE)).append(":");
buf.append(cal.get(Calendar.SECOND));
System.out.println(buf);
}
}
輸出結(jié)果
2017-9-30 23:9:4
但是這個(gè)類在取得的時(shí)候可以進(jìn)行一些簡(jiǎn)單的計(jì)算厦取,例如:若干天后的日期,三天后的日期管搪。
修改代碼
import java.util.Calendar;
public class TestDemo {
public static void main(String args[]) {
Calendar cal = Calendar.getInstance(); // 取得本類對(duì)象
StringBuffer buf = new StringBuffer();
buf.append(cal.get(Calendar.YEAR)).append("-");
buf.append(cal.get(Calendar.MONTH) + 1).append("-"); // 這個(gè)從0開始算
buf.append(cal.get(Calendar.DAY_OF_MONTH) + 3).append(" ");
buf.append(cal.get(Calendar. HOUR_OF_DAY)).append(":");
buf.append(cal.get(Calendar.MINUTE)).append(":");
buf.append(cal.get(Calendar.SECOND));
System.out.println(buf);
}
}
輸出結(jié)果
2017-10-3 23:12:8
如果是日期計(jì)算虾攻,要比Date容易,如果使用Date要進(jìn)行天的計(jì)算更鲁,那么就需要使用long完成了霎箍。
總結(jié)
- 以后數(shù)據(jù)庫(kù)中的日期型就使用java.uitl.Date表示。
- 代碼模型:SimpleDateFormat類實(shí)現(xiàn)String與Date間的互相轉(zhuǎn)換澡为。