具体类(和抽象类相对)java.util.Date
抽象类java.text.DateFormat 和它的一个具体子类,java.text.SimpleDateFormat
抽象类java.util.Calendar 和它的一个具体子类,java.util.GregorianCalendar
具体类可以被实例化, 但是抽象类却不能. 你首先必须实现抽象类的一个具体子类。
Date类:
Date类实际上只是一个包裹类, 它包含的是一个长整型数据, 表示的是从GMT(格林尼治标准时间)1970年, 1月1日
00:00:00这一刻之前或者是之后经历的毫秒数。
Date类常用的两个构造函数:
Date()无参数的构造函数创建的对象可以获取本地当前时间。
Date(long time)使用一个从GMT(格林尼治标准时间)1970年, 1月1日00:00:00这一刻之前或者是之后经历的毫秒数创建一个Date对象
Date示例:
Date date = new Date();
System.out.println(date.getTime()); //1228061164796
System.out.println(date.toString()); //Mon Dec 01 00:06:04 CST 2008
日期数据的定制格式:(DateFormat类、SimpleDateFormat类)
为了定制日期数据的输出格式,我们可以使用DateFormat的子类SimpleDateFormat。SimpleDateFormat有个常用构造方法:
public SimpleDateFormat(String pattern) //pattern指定输出格式
为了定制日期数据的输出格式,我们可以使用DateFormat的子类SimpleDateFormat。SimpleDateFormat有个常用构造方法:
public SimpleDateFormat(String pattern) //pattern指定输出格式
pattern中可以有如下格式符:
y,yy:用2位数字表示的"年"替换。
yyyy:用4位数字表示的"年"替换。
M,MM:用2位数字表示的"月"替换。
MMM:用汉字表示的"月"替换。
d,dd:用2位数字表示的"日"替换。
H,HH:用2位数字表示的"时"替换。
m,mm:用2位数字表示的"分"替换。
s,ss:用2位数字表示的"秒"替换。
E:用"星期"替换
pattern中的普通ASCII字符,必须用单引号“'”字符括起来,如:
pattern="'time':yyyy-MM-dd";
用SimpleDateFormat对象调用如下方法可以定制某时间输出格式:
public String format(Date date)
实例:
SimpleDateFormat sdf = new SimpleDateFormat(" 'time':yyyy-MM-dd");
System.out.println(sdf.format(date)); // time:2008-12-01
假如我们由一个文本字符串包含一个格式化了的日期对象,现在从这个字符串中解析日期数据创建一个日期对象。
使用SimpleDateFormat对象调用如下函数创建一个Date对象:
Date java.text.DateFormat.parse(String source)
实例:
String str="2008-12-1";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try{
Date date=sdf.parse(str);
System.out.println(date); //Mon Dec 01 00:00:00 CST 2008
}
catch(Exception ex){
System.out.println(ex.getMessage());
}
使用SimpleDateFormat对象调用如下函数创建一个Date对象:
Date java.text.DateFormat.parse(String source)
实例:
String str="2008-12-1";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try{
Date date=sdf.parse(str);
System.out.println(date); //Mon Dec 01 00:00:00 CST 2008
}
catch(Exception ex){
System.out.println(ex.getMessage());
}
使用标准的日期格式化过程:
常用的两个获取日期/时间格式器的方法:
public static final DateFormat getDateTimeInstance() //具有默认语言环境的默认格式化风格。
public static final DateFormat getDateTimeInstance(int dateStyle, int timeStyle) //具有默认语言环境的给定日期和时间格式化风格。
常用的两个获取日期/时间格式器的方法:
public static final DateFormat getDateTimeInstance() //具有默认语言环境的默认格式化风格。
public static final DateFormat getDateTimeInstance(int dateStyle, int timeStyle) //具有默认语言环境的给定日期和时间格式化风格。
实例:
Date date = new Date();
DateFormat shortDateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
DateFormat mediumDateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);
DateFormat longDateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG);
DateFormat fullDateFormat = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);
System.out.println(shortDateFormat.format(date)); //08-12-1 下午1:28
System.out.println(mediumDateFormat.format(date)); //2008-12-1 13:28:31
System.out.println(longDateFormat.format(date)); //2008年12月1日 下午01时28分31秒
System.out.println(fullDateFormat.format(date)); //2008年12月1日 星期一 下午01时28分31秒 CST
Calendar类:
使用Date类可以创建日期/时间对象,使用DateFormat类,SimpleDateFormat类可以对Date对象进行格式化。
使用Calendar类可以设置和获取日期/时间数据的特定部分。
Calendar类是抽象类不能实例化对象,但是可以使用Calendar类的static方法getInstance(),可以初始化一个日历对象。如:
Calendar calendar = Calendar.getInstance();
然后可以使用该calendar对象可以调用方法,如:(当year取负数时表示公元前)
public final void set(int year, int month, int date)
public final void set(int year, int month, int date, int hourOfDay, int minute)
public final void set(int year, int month, int date, int hourOfDay, int minute, int second)
Calendar类对象调用如下方法可以获取有关年份,月份,小时,星期等信息,参数field的有效值由Calendar的静态常量指定
public int get(int field)
实例:
calendar.get(Calendar.MONTH); //返回一个整数,如果该整数是0表示一月,11表示12月
Calendar对象调用如下方法可以把时间表示为毫秒:
public long getTimeInMillis()
Calendar使用实例:
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
String 年 = String.valueOf(calendar.get(YEAR)),
月 = String.valueOf(calendar.get(MONTH)+1),
日 = String.valueOf(calendar.get(DAY_OF_MONTH)),
星期 = String.valueOf(calendar.get(DAY_OF_WEEK)-1);
int hour = calendar.get(HOUR_OF_DAY),
minute = calendar.get(MINUTE),
second = calendar.get(SECOND);
System.out.println("现在的时间是:");
System.out.println(年+"年"+月+"月"+日+"日"+"星期"+星期);
System.out.println(hour+"时"+minute+"分"+second+"秒");
calendar.set(2004,7,8); //将日历翻到2004年8月8日,注意7表示八月
long time2004 = calendar.getTimeInMillis();
calendar.set(2008,7,8); //将日历翻到2008年8月8日
long time2008 = calendar.getTimeInMillis();
long 相隔天数 = (time2008-time2004)/(1000*60*60*24);
System.out.println("2008年8月8日和2004年8月8日相隔"+相隔天数+"天");
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
String 年 = String.valueOf(calendar.get(YEAR)),
月 = String.valueOf(calendar.get(MONTH)+1),
日 = String.valueOf(calendar.get(DAY_OF_MONTH)),
星期 = String.valueOf(calendar.get(DAY_OF_WEEK)-1);
int hour = calendar.get(HOUR_OF_DAY),
minute = calendar.get(MINUTE),
second = calendar.get(SECOND);
System.out.println("现在的时间是:");
System.out.println(年+"年"+月+"月"+日+"日"+"星期"+星期);
System.out.println(hour+"时"+minute+"分"+second+"秒");
calendar.set(2004,7,8); //将日历翻到2004年8月8日,注意7表示八月
long time2004 = calendar.getTimeInMillis();
calendar.set(2008,7,8); //将日历翻到2008年8月8日
long time2008 = calendar.getTimeInMillis();
long 相隔天数 = (time2008-time2004)/(1000*60*60*24);
System.out.println("2008年8月8日和2004年8月8日相隔"+相隔天数+"天");
输出结果:
现在的时间是:
2008年12月1日星期1
14时41分45秒
2008年8月8日和2004年8月8日相隔1461天