Java SimpleDateFormat – Java日期格式

时间:2020-02-23 14:36:50  来源:igfitidea点击:

Java SimpleDateFormat和DateFormat类用于日期格式化。
它通常用于需要显示或者利用Java的日期和时间功能的地方。
这两个类都在com.text包中。

  • DateFormat用于根据作为输入提供的特定语言环境将日期格式化为String。

  • 语言环境用于指定区域和语言,以使代码对用户更具语言环境。

  • 日期的书写方式在世界不同地区是不同的。
    例如,2016年12月31日将在旧金山写为2016年12月31日,但同一件事将在美国写成2016年12月31日。

  • 日期格式类未同步,建议为每个线程创建单独的实例。

创建DateFormat实例

可以使用DateFormat类的getDateInstance()和getTimeInstance()方法创建DateFormat对象。

Locale loc = new Locale("en", "US");
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.DEFAULT, loc);

如上面的示例所示,DateFormat的getDateInstance方法需要两个输入参数,第一个参数指定要使用的DateFormat,第二个参数是语言环境。

Java日期格式示例

DateFormat类具有一个负责格式化的格式化方法。

Locale locale = new Locale("fr", "FR");
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.DEFAULT, locale);
String date = dateFormat.format(new Date());
System.out.print(date);

输出:3月3日。 2016

在上面的示例中,为了创建DateFormat实例,我们使用了getDateInstance()方法。

为了执行时间格式,我们需要一个时间实例。
我们将使用getTimeInstance()方法获取时间实例。

Locale locale = new Locale("fr", "FR");
DateFormat dateFormat = DateFormat.getTimeInstance(DateFormat.DEFAULT, locale);
String date = dateFormat.format(new Date());
System.out.print(date);

输出:11:03:01

Java SimpleDateFormat

SimpleDateFormat与DateFormat非常相似,它们之间的唯一主要区别在于,SimpleDateFormat可以用于具有区域设置支持的格式设置(日期到字符串的转换)和用于解析(从字符串到日期的转换),而DateFormat不具有区域设置的支持。

另外,DateFormat是一个抽象类,为日期格式和解析提供基本支持,SimpleDateFormat是扩展DateFormat类的具体类。

创建SimpleDateFormat实例

可以使用SimpleDateFormat构造函数创建SimpleDateFormat,该构造函数是参数化的构造函数,并且需要String模式作为参数。

String pattern = "MM-dd-yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);

在上面的示例中,"字符串"模式是用于格式化日期的模式,并且将在该模式中将输出生成为" MM-dd-yyyy"。

Java SimpleDateFormat示例

为了解析日期,我们需要使用构造函数创建SimpleDateFormat的实例,然后使用format()方法。

让我们看一个使用SimpleDateFormat格式化日期的示例。

String pattern = "MM-dd-yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
String date = simpleDateFormat.format(new Date());
System.out.println(date);

输出:01-02-2016

在上面的示例中,日期为2016年1月2日。

为了解析时间,我们必须在创建SimpleDateFormat实例时更改模式。

String pattern = " HH:mm:ss.SSSZ";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
String date = simpleDateFormat.format(new Date());
System.out.println(date);

输出:13:03:15.454 + 0530

在上面的示例中,模式是一个时间模式,当前时间的格式化是基于该模式进行的。

使用SimpleDateFormat解析

解析是将String转换为java.util.Date实例。
我们可以使用SimpleDateFormat类的parse()方法将字符串解析为日期实例。

为了将String解析为Date,我们需要SimpleDateFormat类的一个实例和一个字符串模式作为该类的构造函数的输入。

String pattern = "MM-dd-yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
Date date = simpleDateFormat.parse("12-01-2016");
System.out.println(date);

输出:`IST 2016年12月1日00:00:00

现在,让我们看一下SimpleDateFormat示例来解析时间。

String pattern = "HH:mm:ss";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
Date date = simpleDateFormat.parse("22:00:03");
System.out.println(date);

输出:Thu Jan 01 22:00:03 IST 1970

在上面的示例中,由于我们没有指定任何日期,因此程序将epoch视为日期,即1970年1月1日。

带有语言环境的Java SimpleDateFormat

我们已经将Locale作为DateFormat的一部分进行了工作,并且已经看到基于区域使用语言环境。
让我们考虑一下,我们想使用法语使用SimpleDateFormat,如何实现呢?

String pattern = "EEEEE MMMMM yyyy HH:mm:ss.SSSZ";
SimpleDateFormat simpleDateFormat =new SimpleDateFormat(pattern, new Locale("fr", "FR"));
String date = simpleDateFormat.format(new Date());
System.out.println(date);

输出:mardi janvier 2016 14:51:02.354 + 0530

在上面的示例中,根据输入的语言环境,用法语命名了月份和日期。

我们已经看到了不同的格式化和解析方式。
让我们看一下应用于格式化模式的模式语法。

Letter for PatternDate or Time componentExamples
GEra designatorAD
yYear2016(yyyy),18(yy)
MMonth in yearJuly(MMMM), Jul(MMM), 07(MM)
wResults in week in year16
WResults in week in month3
DGives the day count in the year266
dDay of the month09(dd), 9(d)
FDay of the week in month4
EDay name in the weekTuesday, Tue
uDay number of week where 1 represents Monday, 2 represents Tuesday and so on2
aAM or PM markerAM
HHour in the day (0-23)12
kHour in the day (1-24)23
KHour in am/pm for 12 hour format (0-11)0
hHour in am/pm for 12 hour format (1-12)12
mMinute in the hour59
sSecond in the minute35
SMillisecond in the minute978
zTimezonePacific Standard Time; PST; GMT-08:00
ZTimezone offset in hours (RFC pattern)-0800
XTimezone offset in ISO format-08; -0800; -08:00

注意:在上述模式中,对于不同的结果,应使用不同数量的字母,例如7月(MMMM),7月(MMM),07(MM)的结果将有所不同。

Java日期时间格式示例

我们讨论了DateFormat和SimpleDateFormat的各个方面。
现在让我们来看一些日期和时间格式不同的示例。

PatternResult
MM/dd/yyyy01/02/2016
dd-M-yyyy hh:mm:ss02-1-2016 06:07:59
dd MMMM yyyy02 January 2016
dd MMMM yyyy zzzz02 January 2016 San Franceco Standard Time
E, dd MMM yyyy HH:mm:ss zTue, 02 Jan 2016 18:07:59 IST