介绍
Java 的 SimpleDateFormat
和 DateFormat
类用于日期格式化。它主要用于我们需要显示或利用 Java 的日期和时间功能的地方。这两个类都位于 com.text
包中。
Java 的 DateFormat
DateFormat
用于根据提供的特定区域设置将日期格式化为String
。- 区域设置用于指定代码更具地区性的地区和语言。
- 不同地区的日期写法不同。例如,
2017年12月31日
在印度写作31-12-2017
,但在美国写作12-31-2017
。 DateFormat
类不是线程同步的,建议为每个线程创建单独的实例。
A DateFormat
object can be created using the getDateInstance()
and getTimeInstance()
method of the DateFormat
class.
Locale loc = new Locale("en", "US");
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.DEFAULT, loc);
注意:自版本19起,构造函数 Locale(String, String) 已弃用。
Locale loc = new Locale.Builder().setLanguage("en").setRegion("US").build();
getDateInstance
方法需要两个输入参数。第一个参数指定要使用的DateFormat
,第二个参数是区域设置。
使用format
DateFormat
类有一个format
方法负责格式化。
Locale locale = new Locale("fr", "FR");
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.DEFAULT, locale);
String date = dateFormat.format(new Date());
System.out.print(date);
此代码将日期格式化为法语(fr
)语言和法国(FR
)地区:
Output3 janv. 2018
使用getTimeInstance()
要创建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);
此代码将时间格式化为法语(fr
)语言和法国(FR
)地区:
Output11:03:01
JavaSimpleDateFormat
SimpleDateFormat
类似于 DateFormat
。它们之间唯一的主要区别是,SimpleDateFormat
可以用于格式化(Date
到 String
转换)和解析(String
到 Date
转换)并支持区域设置,而 DateFormat
不支持区域设置。DateFormat
是一个抽象类,提供了日期格式化和解析的基本支持。SimpleDateFormat
是扩展了 DateFormat
类的具体类。
SimpleDateFormat
可以使用 SimpleDateFormat
构造函数创建。构造函数是一个带参数的构造函数,需要一个 String 模式作为参数。
String pattern = "MM-dd-yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
字符串 pattern
是用于格式化日期的模式,输出将以该模式生成为“MM-dd-yyyy
”。
模式
让我们来看看应该用于格式化模式的模式语法。
Letter for Pattern | Date or Time component | Examples |
---|---|---|
G | Era designator | AD |
y | Year | 2018 (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 |
一些字母应该以不同的数量用于不同的结果,比如月份:
Type | Pattern | Example Output |
---|---|---|
Full Month | MMMM |
July |
Abbreviated Month | MMM |
Jul |
Numeric Month | MM |
07 |
示例
现在让我们看一些不同日期和时间格式的示例。
Pattern | Result |
---|---|
MM/dd/yyyy |
01/02/2018 |
dd-M-yyyy hh:mm:ss |
02-1-2018 06:07:59 |
dd MMMM yyyy |
02 January 2018 |
dd MMMM yyyy zzzz |
02 January 2018 India Standard Time |
E, dd MMM yyyy HH:mm:ss z |
Tue, 02 Jan 2018 18:07:59 IST |
使用SimpleDateFormat()
为了解析日期,我们需要使用构造函数创建SimpleDateFormat
的实例,然后使用format()
方法:
String pattern = "MM-dd-yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
String date = simpleDateFormat.format(new Date());
System.out.println(date);
这段代码将输出“MM-dd-yyyy
”:
Output01-02-2018
该模式生成“年中的月份”、“月中的日期”和“年份”。字符类型(大小写)和字符数量都对字符串起作用。月份将表示为两位数字,日期将表示为两位数字,年份将表示为四位数字。
这段代码将“2018年1月2日”的日期显示为“01-02-2018
”。
对于解析时间,我们必须在创建SimpleDateFormat
实例时更改模式。
String pattern = "HH:mm:ss.SSSZ";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
String date = simpleDateFormat.format(new Date());
System.out.println(date);
这段代码将输出“HH:mm:ss.SSSZ
”:
Output13:03:15.454+0530
该模式生成“小时”、“分钟”、“秒”、“毫秒”和“时区偏移量(RFC模式)”。
这段代码将时间显示为“13:03:15.454+0530
”。
使用parse()
解析是将字符串转换为`java.util.Date`实例。我们可以使用`SimpleDateFormat`类的`parse()`方法将字符串解析为日期实例。为了将字符串解析为日期,我们需要`SimpleDateFormat`类的实例和一个字符串模式作为该类构造函数的输入。
String pattern = "MM-dd-yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
Date date = simpleDateFormat.parse("12-01-2018");
System.out.println(date);
这将输出一个日期(12-01-2018
)没有指定时间:
OutputSat Dec 01 00:00:00 IST 2018
现在让我们看一个`SimpleDateFormat`的示例来解析时间。
String pattern = "HH:mm:ss";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
Date date = simpleDateFormat.parse("22:00:03");
System.out.println(date);
这将输出一个时间(22:00:03
)没有指定日期:
OutputThu Jan 01 22:00:03 IST 1970
因为我们没有指定任何日期,程序将纪元视为日期(即01-Jan-1970
)。
使用Locale
我们已经在DateFormat
的一部分中使用了Locale
,并且我们已经看到区域是基于地区使用的。
String pattern = "EEEEE MMMMM yyyy HH:mm:ss.SSSZ";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern, new Locale("fr", "FR"));
Date date = simpleDateFormat.format(new Date());
System.out.println(date);
此代码将以法语(fr
)语言和法国(FR
)地区格式化当前时间:
Outputmardi janvier 2018 14:51:02.354+0530
根据提供的Locale
,法语中的日和月份被命名 – mardi
是“星期二”,janvier
是“一月”。
结论
在这篇文章中,你学到了关于Java的SimpleDateFormat
和DateFormat
。
参考:
Source:
https://www.digitalocean.com/community/tutorials/java-simpledateformat-java-date-format