Java SimpleDateFormat – Java日期格式
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 Pattern | Date or Time component | Examples |
---|---|---|
G | Era designator | AD |
y | Year | 2016(yyyy),18(yy) |
M | Month in year | July(MMMM), Jul(MMM), 07(MM) |
w | Results in week in year | 16 |
W | Results in week in month | 3 |
D | Gives the day count in the year | 266 |
d | Day of the month | 09(dd), 9(d) |
F | Day of the week in month | 4 |
E | Day name in the week | Tuesday, Tue |
u | Day number of week where 1 represents Monday, 2 represents Tuesday and so on | 2 |
a | AM or PM marker | AM |
H | Hour in the day (0-23) | 12 |
k | Hour in the day (1-24) | 23 |
K | Hour in am/pm for 12 hour format (0-11) | 0 |
h | Hour in am/pm for 12 hour format (1-12) | 12 |
m | Minute in the hour | 59 |
s | Second in the minute | 35 |
S | Millisecond in the minute | 978 |
z | Timezone | Pacific Standard Time; PST; GMT-08:00 |
Z | Timezone offset in hours (RFC pattern) | -0800 |
X | Timezone offset in ISO format | -08; -0800; -08:00 |
注意:在上述模式中,对于不同的结果,应使用不同数量的字母,例如7月(MMMM),7月(MMM),07(MM)的结果将有所不同。
Java日期时间格式示例
我们讨论了DateFormat和SimpleDateFormat的各个方面。
现在让我们来看一些日期和时间格式不同的示例。
Pattern | Result |
---|---|
MM/dd/yyyy | 01/02/2016 |
dd-M-yyyy hh:mm:ss | 02-1-2016 06:07:59 |
dd MMMM yyyy | 02 January 2016 |
dd MMMM yyyy zzzz | 02 January 2016 San Franceco Standard Time |
E, dd MMM yyyy HH:mm:ss z | Tue, 02 Jan 2016 18:07:59 IST |