Java SimpleDateFormat - Java 日期格式
介绍
JavaSimpleDateFormat
和DateFormat
类用于日期格式化。它主要用于我们需要显示或利用 Java 的日期和时间功能的地方。这两个类都存在于com.text
包中。
JavaDateFormat
DateFormat
用于String
根据输入提供的特定语言环境格式化日期。- 区域设置用于指定区域和语言,以使代码更适合用户的区域设置。
- 世界各地写日期的方式不同。例如,
31st Dec 2017
在印度写成 ,31-12-2017
但在美国写成12-31-2017
。 DateFormat
类不同步,建议为每个线程创建单独的实例。
DateFormat
可以使用类的getDateInstance()
和getTimeInstance()
方法创建一个对象DateFormat
。
Locale loc = new Locale("en", "US");
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.DEFAULT, loc);
注意:构造函数 Locale(String, String) 自版本 19 起已弃用
Locale loc = new Locale.Builder().setLanguage("en").setRegion("US").build();
方法getDateInstance
需要DateFormat
两个输入参数。第一个参数指定要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 pattern = "MM-dd-yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
该字符串pattern
是用于格式化日期的模式,并且输出将以该模式生成为“ MM-dd-yyyy
”。
模式
让我们看一下应该用于格式化模式的模式语法。
图案字母 | 日期或时间组件 | 示例 |
---|---|---|
格 | 纪元指示符 | 广告 |
是 | 年 | 2018 (年), 18 (年) |
米 | 月份 | 七月 (MMMM), 七月 (MMM), 07 (MM) |
瓦 | 年内某周的结果 | 16 |
西 | 每个月每周都有结果 | 3 |
德 | 给出一年中的天数 | 266 |
d | 月中日期 | 09(日),9(日) |
F | 月份中的星期几 | 4 |
埃 | 星期几的名称 | 星期二 |
你 | 星期几,1 代表星期一,2 代表星期二,依此类推 | 2 |
一个 | AM 或 PM 标记 | 是 |
赫 | 一天中的小时数(0-23) | 12 |
钾 | 一天中的小时数(1-24) | 23 |
钾 | 12 小时制的上午/下午小时数 (0-11) | 0 |
时长 | 12 小时制的上午/下午小时数 (1-12) | 12 |
米 | 一小时中的分钟 | 59 |
s | 分钟内第二 | 三十五 |
年代 | 分钟中的毫秒 | 978 |
是 | 时区 | 太平洋标准时间;PST;GMT-08:00 |
是 | 时区偏移(以小时为单位)(RFC 模式) | -0800 |
十 | ISO 格式的时区偏移 | -08;-0800;-08:00 |
某些字母应以不同的数量使用以获得不同的结果,例如月份:
类型 | 图案 | 示例输出 |
---|---|---|
整月 | MMMM |
七月 |
缩写月份 | MMM |
七月 |
数字月份 | MM |
07 |
示例
现在让我们看一些不同日期和时间格式的例子。
图案 | 结果 |
---|---|
MM/dd/yyyy |
2018 年 1 月 2 日 |
dd-M-yyyy hh:mm:ss |
2018-02-01 06:07:59 |
dd MMMM yyyy |
2018 年 1 月 2 日 |
dd MMMM yyyy zzzz |
2018 年 1 月 2 日 印度标准时间 |
E, dd MMM yyyy HH:mm:ss z |
2018 年 1 月 2 日星期二 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
实例的过程。我们可以使用parse()
SimpleDateFormat 类的方法将字符串解析为日期实例。要将字符串解析为日期,我们需要 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
我们已经与其合作Locale
并且DateFormat
我们已经看到语言环境是根据地区来使用的。
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
“一月”。
结论
在本文中,您了解了 JavaSimpleDateFormat
和DateFormat
。
参考: