simpleformatter java_SimpleDateFormat 以及java8 - DateTimeFormatter

https://www.cnblogs.com/zhisheng/p/9206758.html

在看的过程中有这么一条:

【强制】SimpleDateFormat 是线程不安全的类,一般不要定义为 static 变量,如果定义为 static,必须加锁,或者使用 DateUtils 工具类。

看到这条我立马就想起了我实习的时候有个项目里面就犯了这个错误,记得当时是这样写的:

private static final SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");

所以才认真的去研究下这个 SimpleDateFormat,所以才有了这篇文章。

它是谁?

想必大家对 SimpleDateFormat 并不陌生。SimpleDateFormat 是 Java 中一个非常常用的类,他是以区域敏感的方式格式化和解析日期的具体类。 它允许格式化 (date -> text)、语法分析 (text -> date)和标准化。

SimpleDateFormat 允许以任何用户指定的日期-时间格式方式启动。 但是,建议使用 DateFormat 中的 getTimeInstance、 getDateInstance 或 getDateTimeInstance 方法来创建一个日期-时间格式。 这几个方法会返回一个默认的日期/时间格式。 你可以根据需要用 applyPattern 方法修改格式方式。

日期时间格式

日期和时间格式由 日期和时间模式字符串 指定。在 日期和时间模式字符串 中,未加引号的字母 'A' 到 'Z' 和 'a' 到 'z' 被解释为模式字母,用来表示日期或时间字符串元素。文本可以使用单引号 (') 引起来,以免进行解释。所有其他字符均不解释,只是在格式化时将它们简单复制到输出字符串。

简单的讲:这些 A ——Z,a —— z 这些字母(不被单引号包围的)会被特殊处理替换为对应的日期时间,其他的字符串还是原样输出。

日期和时间模式(注意大小写,代表的含义是不同的)如下:

006tKfTcgy1fshewuz8vij30vm150tfw.jpg

怎么使用?

日期/时间格式模版样例:(给的时间是:2001-07-04 12:08:56 U.S. Pacific Time time zone)

006tKfTcgy1fshewwuu6pj30x20mqwio.jpg

使用方法:

import java.text.SimpleDateFormat;

import java.util.Date;

/*** Created by zhisheng_tian on 2018/6/19*/

public classFormatDateTime {

publicstaticvoidmain(String[] args) {

SimpleDateFormat myFmt = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");

SimpleDateFormat myFmt1 = new SimpleDateFormat("yy/MM/dd HH:mm");

SimpleDateFormat myFmt2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//等价于now.toLocaleString()

SimpleDateFormat myFmt3 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒 E ");

SimpleDateFormat myFmt4 = new SimpleDateFormat("一年中的第 D 天 一年中第w个星期 一月中第W个星期 在一天中k时 z时区");

Date now = new Date();

System.out.println(myFmt.format(now));

System.out.println(myFmt1.format(now));

System.out.println(myFmt2.format(now));

System.out.println(myFmt3.format(now));

System.out.println(myFmt4.format(now));

System.out.println(now.toGMTString());

System.out.println(now.toLocaleString());

System.out.println(now.toString());

}

}

结果是:

2018年06月19日 23时10分05秒

18/06/19 23:10

2018-06-19 23:10:05

2018年06月19日 23时10分05秒 星期二

一年中的第 170 天 一年中第25个星期 一月中第4个星期 在一天中23时 CST时区

19 Jun 2018 15:10:05 GMT

2018-6-19 23:10:05

Tue Jun 19 23:10:05 CST 2018

使用方法很简单,就是先自己定义好时间/日期模版,然后调用 format 方法(传入一个时间 Date 参数)。

上面的是日期转换成自己想要的字符串格式。下面反过来,将字符串类型装换成日期类型:

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

/*** Created by zhisheng_tian on 2018/6/19*/

public classStringFormatDate {

publicstaticvoidmain(String[] args) {

String time1 = "2018年06月19日 23时10分05秒";

String time2 = "18/06/19 23:10";

String time3 = "2018-06-19 23:10:05";

String time4 = "2018年06月19日 23时10分05秒 星期二";

SimpleDateFormat myFmt = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");

SimpleDateFormat myFmt1 = new SimpleDateFormat("yy/MM/dd HH:mm");

SimpleDateFormat myFmt2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//等价于now.toLocaleString()

SimpleDateFormat myFmt3 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒 E");

Date date1 = null;

try {

date1 = myFmt.parse(time1);

} catch (ParseException e) {

e.printStackTrace();

}

System.out.println(date1);

Date date2 = null;

try {

date2 = myFmt1.parse(time2);

} catch (ParseException e) {

e.printStackTrace();

}

System.out.println(date2);

Date date3 = null;

try {

date3 = myFmt2.parse(time3);

} catch (ParseException e) {

e.printStackTrace();

}

System.out.println(date3);

Date date4 = null;

try {

date4 = myFmt3.parse(time4);

} catch (ParseException e) {

e.printStackTrace();

}

System.out.println(date4);

}

}

结果是:

Tue Jun 19 23:10:05 CST 2018

Tue Jun 19 23:10:00 CST 2018

Tue Jun 19 23:10:05 CST 2018

Tue Jun 19 23:10:05 CST 2018

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值