Date日期
当我们只需要一个日期时,或从系统取得,或从数据库查询,都可以放入一个Date对象。
当我们需要对Date进行详细分析,获取其中的年月日分秒各个部分的信息,用Calendar类。
当我们需要对一个字符串转成Date对象,或者想让一个Date对象按照我们预期的格式进行输出字符串时,
需要用DateFormat类或它的子类SimpleDateFormat
DateFormat format = DateFormat.getDateInstance(DateFormat.SHORT, Locale.SIMPLIFIED_CHINESE);
DateFormat format2 = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.SIMPLIFIED_CHINESE);
DateFormat format3 = DateFormat.getDateInstance(DateFormat.LONG, Locale.SIMPLIFIED_CHINESE);
DateFormat format4 = DateFormat.getDateInstance(DateFormat.SHORT, Locale.ENGLISH);
DateFormat format5 = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.ENGLISH);
DateFormat format6 = DateFormat.getDateInstance(DateFormat.LONG, Locale.ENGLISH);
try {
System.out.println("format : " +format.format(new Date()));
System.out.println("format2 : "+format2.format(new Date()));
System.out.println("format3 : "+format3.format(new Date()));
System.out.println("format4 : "+format4.format(new Date()));
System.out.println("format5 : "+format5.format(new Date()));
System.out.println("format6 : "+format6.format(new Date()));
} catch (Exception e) {
e.printStackTrace();
}
String dateString = "2013-02-12T12:22:33";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss");
System.out.println("simpleDate format " + simpleDateFormat.format(new Date()));
try {
System.out.println("simpleDate parse "+ simpleDateFormat.parse(dateString));
} catch (ParseException e) {
e.printStackTrace();
}
Calendar的使用:
Calendar本身是一个抽象类,不能直接实例化,但是Calendar类提供一个工厂方法,即getInstance来创建一个Calendar实例,通过setTime()设定一个Calendar内部的毫秒数,之后就可以对这个毫秒数进行分析,进而得到它的年月日信息。同时,我们也可以对Calendar直接设定年月日属性,从而获取对应的Date对象。
需要注意的是,Calendar的一月是从0开始的,即你设定月份为4时,其实是五月。
下面是一个Calendar的简单示例。
Date now = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(now);
calendar.get(Calendar.YEAR);
System.out.println("the year is "+calendar.get(Calendar.YEAR));
System.out.println("the month is "+calendar.get(Calendar.MONTH));
calendar.set(Calendar.YEAR, 2014);
calendar.set(Calendar.MONTH, 2);
calendar.set(Calendar.DAY_OF_MONTH, 12);
System.out.println("calendar date is "+calendar.getTime());
在讲到Calendar就不可避免的涉及到java的国际化问题和时区的问题。
(1) 国际化
Locale 表示地区,每一个Locale对象都代表了一个特定的地理、政治和文化地区。
你可以用如下代码看看你的系统默认地区。
Locale locale = Locale.getDefault();
locale.getCountry();
locale.getLanguage();
System.out.println("default locale is "+locale);
System.out.println("default country is "+locale.getCountry());
System.out.println("default language is "+locale.getLanguage());
2) 时区
在java中用java.util.TimeZone类来表示一个时区。每一个时区都一个id,可以利用TimeZone.getAvailableIDs()这个方法获取所有的id。
TimeZone timeZone = TimeZone.getDefault();
System.out.println("default time zone is "+ timeZone.getDisplayName());
Calendar的工厂构造方法
前面说到,Calendar是一个抽象类,提供了static的工厂构造方法来提供一个实例。
Calendar有多个的工厂构造方法:
public static Calendar getInstance()
{
return createCalendar(TimeZone.getDefault(), Locale.getDefault(Locale.Category.FORMAT));
}
public static Calendar getInstance(Locale aLocale)
{
return createCalendar(TimeZone.getDefault(), aLocale);
}
public static Calendar getInstance(TimeZone zone, Locale aLocale)
{
return createCalendar(zone, aLocale);
}
Calendar的实例构造最终都是调用了这个方法
private static Calendar createCalendar(TimeZone zone, Locale aLocale)