介绍
时间是人们生活中必不可少的元素,而对于程序而言,如何处理时间也是一项必须掌握的能力。在Java中,我们可以使用各种函数和方法轻松地格式化和操作时间,本文将介绍如何在Java中使用各种方式格式化时间。
获取当前时间
获取当前时间是最基本的时间操作之一,Java中提供了多种方式获取当前时间。其中,最简单的方法是使用System类的currentTimeMillis()方法。它返回当前时间与系统基准时间之间以毫秒为单位的时间差,然后我们可以使用Date类来处理这个时间差,将其转换为自己所需要的时间格式。
long currentTime = System.currentTimeMillis(); Date date = new Date(currentTime); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String formattedDate = dateFormat.format(date); System.out.println(formattedDate);
执行上述代码,就可以得到当前时间的字符串表示,“yyyy-MM-dd HH:mm:ss”是最常用的时间格式,其中分别代表年、月、日、小时、分钟和秒,输出结果如下: 2021-07-15 14:34:23
格式化时间
除了上面简单的获取当前时间外,还有很多情况需要将时间格式化成我们想要的样子。Java中,可以使用SimpleDateFormat类来进行时间格式化。DateFormat类是一个抽象类,SimpleDateFormat是它的一个具体实现。可以使用SimpleDateFormat的format()方法将Date对象格式化成字符串。
下面是一些基本的时间格式的示例:
SimpleDateFormat formatter1 = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat formatter2 = new SimpleDateFormat("HH:mm:ss"); SimpleDateFormat formatter3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat formatter4 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); SimpleDateFormat formatter5 = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz");
格式化时间可以定制化,下面是一些常用的格式化标识符:
- y:年
- M:月
- d:日
- H:小时
- m:分钟
- s:秒
- S:毫秒
- E:星期几
- D:一年中的第几天
- F:一月中的第几个星期几
- w:一年中的第几个星期
- W:一月中的第几星期
- a:上午/下午标识
- k:小时(1-24)
- K:小时(0-11)
- z:时区
下面是一个将时间格式化为“yyyy-MM-dd HH:mm:ss”格式的示例:
Date date = new Date(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String formattedDate = formatter.format(date); System.out.println(formattedDate);
运行上面的代码,就会输出类似于这样的字符串:"2021-07-15 19:08:23"。
时间字符串转为Date对象
除了将Date对象转换为时间字符串,还可以将字符串转换为Date对象。在Java中,可以使用SimpleDateFormat类的parse()方法将时间字符串转换为Date对象。
String dateStr = "2021-07-15 19:08:23"; SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = formatter.parse(dateStr);
执行上述代码,就可以将时间字符串“2021-07-15 19:08:23”转换为Date对象,从而可以进行后续的时间操作。
小标题:使用Calendar类操作时间
除了使用Date类来表示时间之外,还可以使用Calendar类来进行时间操作。相比Date类,Calendar类提供了更多的时间操作方法,例如日期加减、获取特定字段以及计算两个时间之间的差等。下面看一下Calendar类的一些用例。
1、计算两个时间的差值
Calendar start = Calendar.getInstance(); Calendar end = Calendar.getInstance(); start.setTime(new SimpleDateFormat("yyyy-MM-dd").parse("2020-01-01")); end.setTime(new SimpleDateFormat("yyyy-MM-dd").parse("2022-01-01")); long diff = end.getTimeInMillis() - start.getTimeInMillis(); long days = diff / (1000 * 60 * 60 * 24); System.out.println(days);
执行上面的代码,可以得到两个日期相差的天数。输出结果为:731,即从2020年1月1日到2022年1月1日一共经过了731天。这里用到了Calendar类的getTimeInMillis()方法,可以获取Calendar对象所表示的时间距离1970年1月1日00:00:00的毫秒数。
2、获取指定时间的特定字段
Calendar类能够获取时间的各种字段,例如年、月、日等。可以调用get()方法来获取特定的字段。下面是一个获取当前时间的各个字段值的例子。
Calendar calendar = Calendar.getInstance(); int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH) + 1; int day = calendar.get(Calendar.DAY_OF_MONTH); int hour = calendar.get(Calendar.HOUR_OF_DAY); int minute = calendar.get(Calendar.MINUTE); int second = calendar.get(Calendar.SECOND); System.out.println(year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second);
输出结果为当前的年月日时分秒。
小标题:使用Joda-Time库操作时间
除了Java自带的Date和Calendar类之外,Joda-Time库也是一个强大的时间处理工具,它提供了许多方便的时间操作。下面简单介绍一下使用Joda-Time库来操作时间。
1、计算时间差
与Java自带的时间处理类相比,Joda-Time库可以更轻松地计算时间差。在Joda-Time库中,时间差是通过Interval类来表示的,我们可以使用它的getDuration()方法获取时间差(Duration)。
DateTime start = new DateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2020-01-01 00:00:00")); DateTime end = new DateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2022-01-01 00:00:00")); Interval interval = new Interval(start, end); Duration duration = interval.toDuration(); long days = duration.getStandardDays(); System.out.println(days);
执行上述代码,就可以得到从2020年1月1日到2022年1月1日的时间差(天数)。输出结果为:731。
2、格式化时间
与Java自带的时间处理类相比,Joda-Time库提供的时间格式化功能也更加强大。在Joda-Time库中,我们可以使用DateTimeFormatter类来对时间进行格式化,具体用法与Java自带的SimpleDateFormat类类似。
DateTime date = new DateTime(); DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"); String formattedDate = formatter.print(date); System.out.println(formattedDate);
运行上面的代码,输出的就是当前时间的字符串表示。
总结
本文介绍了Java中如何使用多种方式格式化时间,包括获取当前时间、格式化时间、将时间字符串转换为Date对象等等。同时,还介绍了使用Calendar类和Joda-Time库操作时间的方法,可以根据实际需求选择不同的工具来处理时间。