您的位置:

使用Java格式化时间

介绍

时间是人们生活中必不可少的元素,而对于程序而言,如何处理时间也是一项必须掌握的能力。在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库操作时间的方法,可以根据实际需求选择不同的工具来处理时间。