用Java解析和格式化日期

时间:2020-01-09 10:35:57  来源:igfitidea点击:

使用Java的java.text.SimpleDateFormat类,既可以解析字符串中的日期,也可以将日期格式格式化为字符串。我在Java国际化教程的文本SimpleDateFormat中更详细地介绍了" SimpleDateFormat"。

还可以使用较新的Java DateTimeFormatter解析和格式化日期,该Java DateTimeFormatter能够对Java 8中添加的较新的日期时间类进行日期解析和格式化。

即使两个用于解析和格式化日期的类在其各自的文本中都进行了更详细的介绍,但我仍将在下面为我们展示一些如何使用它们的示例。

SimpleDateFormat示例

这是一个如何使用SimpleDateFormat类格式化和解析日期的示例。 SimpleDateFormat类适用于java.util.Date实例。这是两个简单的示例:

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");

String dateString = format.format( new Date()   );
Date   date       = format.parse ( "2009-12-31" );

作为参数传递给SimpleDateFormat类的字符串是一种模式,该模式指示实例如何解析和格式化日期。在上面的示例中,我使用了模式" yyyy-MM-dd",这表示年份的4位数字(yyyy),月份的2位数字(MM)和日期的2位数字(dd)。数字组之间用破折号(-)分隔,因为我也在模式中的数字组之间指定了数字。

以下是我们可以使用的最常见的图案字母的列表。有关完整列表,请参见SimpleDateFormat类的官方JavaDoc。

y   = year   (yy or yyyy)
M   = month  (MM)
d   = day in month (dd)
h   = hour (0-12)  (hh)
H   = hour (0-23)  (HH)
m   = minute in hour (mm)
s   = seconds (ss)
S   = milliseconds (SSS)
z   = time zone  text        (e.g. Pacific Standard Time...)
Z   = time zone, time offset (e.g. -0800)

以下是一些模式示例,其中包含每个模式如何格式化或者期望解析日期的示例:

yyyy-MM-dd           (2009-12-31)

dd-MM-YYYY           (31-12-2009)
    
yyyy-MM-dd HH:mm:ss  (2009-12-31 23:59:59)

HH:mm:ss.SSS         (23:59.59.999)

yyyy-MM-dd HH:mm:ss.SSS   (2009-12-31 23:59:59.999)

yyyy-MM-dd HH:mm:ss.SSS Z   (2009-12-31 23:59:59.999 +0100)

DateTimeFormatter示例

格式化日期的另一种方法是使用DateTimeFormatter,它与Java 8中添加的较新的日期时间类一起使用。这是DateTimeFormatter的示例,用于将日期格式化为字符串:

DateTimeFormatter formatter = DateTimeFormatter.BASIC_ISO_DATE;

String formattedDate = formatter.format(LocalDate.now());
System.out.println(formattedDate);

如我们所见,DateTimeFormatter具有一些可以使用的预定义实例。在上面的示例中,我们使用了" DateTimeFormatter.BASIC_ISO_DATE"实例,该实例配置为使用ISO日期时间格式来解析和格式化日期。