Java日期格式化

今天做国际支付的时候,拿到支付数据的时间是太平洋的时间,而且格式是英文的,要把拿到的时间字符串转为Date格式,由于时区和语音不同,所以遇到了小问题,顾特找下java日期格式化相关知识来拓展下自己的知识。

时间标记符主要有:

时间标记符


yyyy:年
MM:月
dd:日
hh:1~12小时制(1-12)
HH:24小时制(0-23)
mm:分
ss:秒
S:毫秒
E:星期几
D:一年中的第几天
F:一月中的第几个星期(会把这个月总共过的天数除以7)
w:一年中的第几个星期
W:一月中的第几星期(会根据实际情况来算)
a:上下午标识
k:和HH差不多,表示一天24小时制(1-24)。
K:和hh差不多,表示一天12小时制(0-11)
z:表示时区

当然这些时间标记符适用于其他编程语言。
在编写时间格式的时候,要主要标记符的大小写,否则会很乱。同时每个字母可以写多个,如:yyyyyyyyyyy。根据你的数大小,根据写的字母的长度,在前面补零。
在java用,通常用SimpleDateFormat这个类来处理时间和字符串之间的转换,

Date转字符串

如:


SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss z E MMM”);
System.out.println(sdf.format(new Date()));

会输出格式:2016-08-30 22:05:54 CST 星期二 八月
其中 E会输出星期几,z表示时区,在国际中,时区是很重要的,MMM是输出分数字的月份,因为本地是在中国,所以是中文的“八月”
然后在SimpleDateFormat构造方法中,除了可以带pattern外,还可以带locale地区,是显示地区的文字
如:


SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss z E MMM”, Locale.ENGLISH);
System.out.println(sdf.format(new Date()));

则会显示:2016-08-30 22:06:42 CST Tue Aug

字符串转Date

同样,字符串转Date也是如此,如:


SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss z E MMM”);
System.out.println(sdf.parse(“2016-08-30 22:05:54 CST 星期二 八月”));

其中时间时区也应该对应,否则会出现转不了的,上面的例子只是默认用本地时区
如下面则会抛出ParseException


SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss z E MMM”,Locale.ENGLISH);
System.out.println(sdf.parse(“2016-08-30 22:05:54 CST 星期二 八月”));

抛出:java.text.ParseException