专注Java教育14年 全国咨询/投诉热线:444-1124-454
赢咖4LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java学习 使用SimpleDateFormat类进行Java日期格式化

使用SimpleDateFormat类进行Java日期格式化

更新时间:2022-04-22 10:46:02 来源:赢咖4 浏览3227次

Java日期类型是大家要了解的,该类java.text.SimpleDateFormat用于根据您自己指定的格式模式解析和格式化日期。解析日期时,JavaSimpleDateFormat通常从Java String解析日期。格式化日期时,SimpleDateFormat通常将Date对象格式化为字符串,尽管它也可以将日期格式化为StringBuffer.

本文解释了如何使用SimpleDateFormat类来格式化日期。

创建一个 SimpleDateFormat

你创建一个SimpleDateFormat这样的实例:

字符串模式 = "yyyy-MM-dd";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);

pattern传递给构造函数 的参数SimpleDateFormat 是用于解析和格式化日期的模式。模式语法将在本文后面介绍。该模式只是一个普通的 Java String。

格式化日期

创建SimpleDateFormat实例后,您可以使用其format()方法格式化日期。这是一个例子:

字符串模式 = "yyyy-MM-dd";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
字符串日期 = simpleDateFormat.format(new Date());
System.out.println(日期);

Date传递给format()方法的实例是一个 实例java.util.Date 。

上述SimpleDateFormat示例打印的输出将是:

2018-09-09

请注意格式化的日期字符串是如何以年、月、日开头的。日期字段的顺序由传递给SimpleDateFormat构造函数的日期模式确定。

将日期格式化为 StringBuffer

JavaSimpleDateFormat类还能够将Date对象格式化为StringBuffer,而不是返回带有日期格式的单个字符串。该类 SimpleDateFormat通过一个将,和一个实例作为参数 的format()方法版本来实现这一点。DateStringBufferFieldPosition

这是使用 Java 将日期格式化为 StringBuffer 的示例SimpleDateFormat:

StringBuffer stringBuffer = new StringBuffer();
现在日期 = 新日期();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ");
simpleDateFormat.format(now, stringBuffer, new FieldPosition(0));

目前尚不清楚如何FieldPosition使用该实例。无论 传递给构造函数的值是 什么,该方法似乎都会format() 将格式化的字符串附加到末尾。StringBufferintFieldPosition

解析日期

java.util.Date您可以使用实例的parse() 方法 将字符串解析为SimpleDateFormat实例。这是一个例子:

字符串模式 = "yyyy-MM-dd";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
日期日期 = simpleDateFormat.parse("2018-09-09");

执行此代码后,date变量将指向Date 表示 2018 年 9 月 9 日的实例。

为特定语言环境创建 SimpleDateFormat

您可以创建一个SimpleDateFormat针对特定 JavaLocale的实例。这样做将根据Locale相关的日期格式化日期。例如,包含工作日名称的格式化模式将以给定的语言编写工作日Locale。这是一个例子:

字符串模式 = "EEEEE dd MMMMM yyyy HH:mm:ss.SSSZ";
简单日期格式 简单日期格式 =
        新的 SimpleDateFormat(模式,新的区域设置(“da”,“DK”));
字符串日期 = simpleDateFormat.format(new Date());
System.out.println(日期);

此代码打印的输出可能是:

søndag 2018 年 9 月 9 日 09:53:17.013+0200

请注意工作日 (søndag = sunday) 和月份 (september) 是如何用丹麦语书写的。

日期格式符号

可以自定义格式化输出中使用的日期符号,用于特定的Locale. 您可以使用java.text.DateFormatSymbols实例来执行此操作。这是一个例子:

区域设置 locale = new Locale("en", "UK");
DateFormatSymbols dateFormatSymbols = new DateFormatSymbols(locale);
dateFormatSymbols.setWeekdays(新字符串[]{
        “没用过”,
        “悲伤的星期天”,
        “狂躁星期一”,
        “繁荣的星期二”,
        “潮湿的星期三”,
        “总星期四”,
        “肥胖星期五”,
        “超级星期六”,
});
字符串模式=“EEEEE MMMMM yyyy”;
简单日期格式 简单日期格式 =
        新的 SimpleDateFormat(模式,dateFormatSymbols);
字符串日期 = simpleDateFormat.format(new Date());
System.out.println(日期);

首先为 UK 创建一个新DateFormatSymbols实例Locale。

其次,设置了一组新的工作日名称。请注意,第一个字符串"unused" 从未使用过。此数组中的索引必须从 1 开始,才能被Calendar.SUNDAY等 Calendar.MONDAY常量索引。Calendar.SUNDAY常数是 1,Calendar.MONDAY 是 2 等等 。

第三个 aSimpleDateFormat是使用创建的DateFormatSymbols,并且使用它格式化日期。由此打印的输出可能如下所示:

超级星期六 2012 年 11 月

请注意如何使用自定义工作日名称。

DateFormatSymbols您可以在实例 上设置更多日期格式符号。以下是可用于设置其他符号的方法:

dateFormatSymbols.setWeekdays();
dateFormatSymbols.setAmPmStrings();
dateFormatSymbols.setEras();
dateFormatSymbols.setLocalPatternChars();
dateFormatSymbols.setMonths();
dateFormatSymbols.setShortMonths();
dateFormatSymbols.setShortWeekdays();
dateFormatSymbols.setZoneStrings();

java.text.DateFormatSymbols有关这些方法和符号的更多详细信息, 请参阅该类的 JavaDoc 。

设置 SimpleDateFormat 的时区

到目前为止,本教程中显示的示例均使用系统默认时区。这意味着,如果您正在格式化日期,SimpleDateFormat则会假定您要根据系统的时区格式化该日期。但是,这可能并不总是您想要的。

SimpleDateFormat您可以使用其setTimeZone()方法 设置 a 的时区。该setTimeZone()方法将Java TimeZone 实例 ( java.util.TimeZone) 作为参数。下面是一个示例,展示了如何设置 JavaSimpleDateFormat实例的时区:

SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ");
simpleDateFormat1.setTimeZone(TimeZone.getTimeZone("欧洲/巴黎"));

设置时区后,SimpleDateFormat将更改其格式。这是一个将时区设置为两个不同时区的示例,并为每个时区设置相同的日期:

现在日期 = 新日期();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ");
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("Europe/London"));
System.out.println(simpleDateFormat.format(now));
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("Europe/Paris"));
System.out.println(simpleDateFormat.format(now));

此示例打印的输出类似于:

2018-09-09 10:43:54+0100
2018-09-09 11:43:54+0200

注意格式化日期的+0100和+0200部分。这些指示时间格式化为哪个时区。顺便说一句,伦敦比 UTC / GMT 早 1 小时,而巴黎比 2 小时早,是因为夏令时。在冬季期间,时区偏移量将是+0000和 +0100。

ISO 日期格式

有时您可能希望Date根据ISO 日期格式格式化a 。更具体地说, ISO 8601 日期格式。ISO 8601 日期格式(以下简称 ISO 日期格式)如下所示:

yyyy-MM-ddTHH:mm:ss:sssZ

ISO 8601 日期格式的优势在于,如果您对使用 ISO 8601 格式格式化的日期字符串进行排序,则字符串实际上将按日期顺序进行排序。换句话说,字母顺序与日期时间顺序相同。

上述格式中唯一的新字符是T日期和时间之间的,以及 Z表示时区的模式末尾的 。两者将在下面解释。请注意,ISO 8601 日期格式似乎不包括其日期格式中的毫秒。

这T实际上是一个文字字符,必须位于 ISO 8601 日期字符串的日期和时间部分之间。例如:

2018-09-24T17:48:00

代表时区的Z字符可以是:

一个字面Z字符。在这种情况下,Z代表 UTC 时区。

使用以下模式之一编码的时区字符串:

±hh:mm

±hhmm

±hh

在这些 ISO 时区格式中,JavaSimpleDateFormat类仅支持第二种格式 ( ),即以字符 +hhmm结尾的格式。Z

为了使用以 UTC 时区字符SimpleDateFormat结尾的 ISO 8601 格式创建 Java 实例 Z,您需要使用以下日期模式字符串:

yyyy-MM-dd'T'HH:mm:ss'Z'

请注意T和Z字符是如何用单引号字符括起来的。这是为了让SimpleDateFormat类将它们视为要插入的文字字符,而不是试图将它们解释为代表日期的某些部分。如果不将 Tand字符括在单引号中,创建实例Z时会出现异常 。 以下是使用上述 ISO 8601 日期格式模式 SimpleDateFormat创建 Java 的示例:SimpleDateFormat

String isoDatePattern = "yyyy-MM-dd'T'HH:mm:ss'Z'";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(isoDatePattern);
String dateString = simpleDateFormat.format(new Date());

以下是SimpleDateFormat使用上述模式格式化的日期示例:

2018-09-24T18:01:24Z

为了根据 ISO 8601 日期格式格式化日期,其时区与 UTC 不同,请在创建 JavaSimpleDateFormat实例时使用以下日期模式:

yyyy-MM-dd'T'HH:mm:ssZ

请注意,该Z字符不再用单引号括起来。SimpleDateFormat以下是使用上述日期格式 创建 Java 的示例:

String isoDatePattern = "yyyy-MM-dd'T'HH:mm:ssZ";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(isoDatePattern);
String dateString = simpleDateFormat.format(new Date());

从上面的代码示例生成的日期字符串将类似于以下内容:

2018-09-24T18:09:24+0200

通过上述介绍,相信大家对使用SimpleDateFormat类进行Java日期格式化已经有所了解,大家如果想了解更多相关知识,不妨来关注一下赢咖4的Java赢咖4在线学习,里面的课程从入门到精通,通俗易懂,很适合没有基础的小伙伴学习,希望对大家能够有所帮助哦。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>