更新时间:2022-04-22 10:46:02 来源:极悦 浏览3535次
Java日期类型是大家要了解的,该类java.text.SimpleDateFormat用于根据您自己指定的格式模式解析和格式化日期。解析日期时,JavaSimpleDateFormat通常从Java String解析日期。格式化日期时,SimpleDateFormat通常将Date对象格式化为字符串,尽管它也可以将日期格式化为StringBuffer.
本文解释了如何使用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构造函数的日期模式确定。
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针对特定 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您可以使用其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。
有时您可能希望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日期格式化已经有所了解,大家如果想了解更多相关知识,不妨来关注一下极悦的Java极悦在线学习,里面的课程从入门到精通,通俗易懂,很适合没有基础的小伙伴学习,希望对大家能够有所帮助哦。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习