深入理解Java常用类-----时间日期 (3)

很明显,有三种不同的方式来获取DateFormat实例,每种方式有三个重载,getDateInstance用来处理日期,getTimeInstance用来处理时间,getDateTimeInstance既可以处理日期,也可以处理时间。我们通过一个例子看看他们之间的区别:

public static void main(String[] args) { Calendar c = Calendar.getInstance(); System.out.println(DateFormat.getDateInstance().format(c.getTime())); System.out.println(DateFormat.getTimeInstance().format(c.getTime())); System.out.println(DateFormat.getDateTimeInstance().format(c.getTime())); }

输出结果:

2017-5-29 17:18:26 2017-5-29 17:18:26

很显然,三者之间的区别也是不言而喻。对于他们另外两个重载来说,一个重载提供修改输出风格,另一个提供修改locale。无论是上述的哪一种工厂方法,在他们内部都调用的是同一个函数

private static DateFormat get(int timeStyle, int dateStyle,int flags, Locale loc)

四个参数,所有我们在调用工厂方法的时候没有提供的参数值都会使用默认值。至于该方法具体是如何实现创建一个实例返回的我们就暂时不深究了。至于其他的一些方法,我们将在其子类SimpleDateFormat中学习。

四、优秀的实现类SimpleDateFormat
     SimpleDateFormat是DateFormat的一个优秀的实现类,它增强了一个重要的性质。它允许自定义格式输出模板。构造SimpleDateFormat实例的时候,可以传入一个pattern作为输出模板。看个例子:

public static void main(String[] args) { Calendar c = Calendar.getInstance(); SimpleDateFormat sm = new SimpleDateFormat("yyyy年MM月dd日 E HH时mm分ss秒"); System.out.println(sm.format(c.getTime())); }

输出结果:

2017年05月29日 星期一 20时25分31秒

上述的代码中,字符串yyyy年MM月dd日 E HH时mm分ss秒就是一个模板pattern,其中:

yyyy表示使用四位数字输出年份

MM表示使用两位数字表示月份

dd表示使用两位数字表示日

E表示星期几

HH表示使用两位数字表示小时(24以内)

mm和ss分别表示分钟和秒数

其中需要注意一点的是,m这个字母大写状态被用作表示月份,小写状态被用作表示分钟,不能混用二者。除了可以使用HH表示小时以外,hh也可以表示小时,只是它是12的(上午和下午)。当然我们也可以逆向操作:

public static void main(String[] args) throws ParseException { Calendar c = Calendar.getInstance(); SimpleDateFormat sm = new SimpleDateFormat("yyyy年MM月dd日 E HH时mm分ss秒"); String s = "2016年11月11日 星期五 00时00分00秒"; System.out.println(sm.parse(s)); }

输出结果:

Fri Nov 11 00:00:00 CST 2016

五、开源第三方库Joda-Time
     Joda-Time库中的内容还是很多的,我们简单了解下基本的使用即可,至于深入学习该库,大家可以自行尝试,此处限于篇幅,不再赘述。在该库中DateTime相当于jdk中Calendar,主要完成对日期年月日的计算操作。首先我们通过简单易理解的方式创建DateTime的实例对象:

//2017-05-29 21:40 DateTime dt = new DateTime(2017,5,29,21,40); //2017-05-29 21:40 50秒 DateTime dt2 = new DateTime(2017,5,29,21,40,50);

创建一个日期实例比Calendar中为每个属性set值方便多了。在该库中获取日期的操作被分解了,不像Calendar中共享一个int数组。

DateTime dt = new DateTime(2017,5,29,21,40); System.out.println("year: "+dt.getYear()); System.out.println("month: "+dt.getMonthOfYear()); System.out.println("day: "+dt.getDayOfMonth()); System.out.println("hour: "+dt.getHourOfDay()); System.out.println("minute: "+dt.getMinuteOfHour()); System.out.println("second: "+dt.getSecondOfMinute()); System.out.println("millisecond: " +dt.getMillisOfSecond()); System.out.println("day_of_week: " +dt.getDayOfWeek());

我们也可以直接使用DateTime的tostring方法来实现将日期转换成指定pattern的字符串,例如:

DateTime dt = new DateTime(2017,5,29,21,40); System.out.println(dt.toString("yyyy-MM-dd HH:mm:ss"));

上述代码将会把日期类型按照指定的模板输出,该Joda-Time库中内容很多,此处就简单介绍到这, 感兴趣的同学可以自行研究,该库的核心优势就在于它将很多复杂的操作分解为单个简单操作,这也是我们程序设计中核心的思维方式。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzjgxx.html