Java 根据国家语言的时间格式化

总所周知,java的时间格式化使用SimpleDateFormat类中的#format和#parse方法,但是这个根据JVM的语言、国家来确定的对格式的解析,例如yyyy MMM dd 对于不同的国家语言是不一样的。

Date date = new Date();
        DateFormat sdf = new SimpleDateFormat("yyyy MMM dd HH:mm:ss");
        System.out.println(sdf.format(date));

输出结果为:2016 十一月 24 14:35:19
API中对 M的解释为:

  • 如果模式字母的数量为 3 或大于 3,则将月份解释为 text;否则解释为 number。

    由于系统的语言环境是中文,所以这里月份的输出的十一月 。
    但是我想输出的月份是Nov怎么办呢?
    上文中提到SimpleDateFormat是根据JVM的国家和语言来进行模式解析的,显然 Nov不符合中国的。当然可以通过改变windows系统的国家语言设置,也可以通过代码来实现 ,只需要添加一句话:

Locale.setDefault(Locale.US);

也可以使用SimpleDateFormat的构造方法SimpleDateFormat(String pattern, Locale locale)
修改后的代码:

Date date = new Date();
Locale.setDefault(Locale.US);
DateFormat sdf = new SimpleDateFormat("yyyy MMM dd HH:mm:ss");
DateFormat sdf_locale = new SimpleDateFormat("yyyy MMM dd HH:mm:ss",Locale.US);
System.out.println(sdf.format(date));
System.out.println(sdf_locale.format(date));

代码的输出为:2016 Nov 24 14:41:19

使用parse时同理,在new SimpleDateFormat之前设置JVM 的默认语言环境就可以。

可以想到的应用场景:在开发网络爬虫时,遇到国外的网站 大多以 月份的简写或单词 不是以数字的形式,需要把时间换成成距离1970年1月1日的毫秒数(Date#getTime方法),或者转换成自己的时间表达格式。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值