我们通常都很喜欢用SimpleDateFormat来做一些日期和字符串之间的转换,就是所谓的format()和parse()了,具体用法看程序或者是JAVA的API文档,这里不累述了。
但是往往我们忘记了,JAVA的国际化这个让人欢喜让人愁的东西。
下面出现一个问题:
以下程序段
String dateStr = "17/Mar/2003 11:30:51";
SimpleDateFormat frm = new SimpleDateFormat("dd/MMM/yyyy HH:mm:ss");
Date date = frm.parse(dateStr);
SimpleDateFormat frm1 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
System.out.println("reformat : " + frm1.format(date));
这运行时会抛出异常java.text.ParseException: Unparseable date: "17/Mar/2003 11:30:51",显然程序不能parse到“Mar”这个英文月的缩写。但是按照java上面的文档显示,以上程序是没有问题的。一个典型的运行时异常。不用说考虑一下我们的环境。
当前程序编写的环境是中文winxp,jdk1.4.2,IDEA 4.0,呵呵,我们是中国人当然都喜欢用中文环境啦。问题出来了吧?看一下一段代码:
Date date = new Date();
SimpleDateFormat frm1 = new SimpleDateFormat("yyyy/MMM/dd HH:mm:ss");
System.out.println("now : " + frm1.format(date));
输出结果是:now : 2004/二月/24 11:57:00
看到了,缺省状态底下,我们用SimpleDateFormat是按照我们当前系统的Locale(请恕我一直都搞不清楚他的中文翻译)的,也就是中文的Locale,但是我们要进行分析的日期字符串是英文的,当然就认不出来了。
ok,知道了之后,我们修改一下加多个locale进去,让SimpleDateFormat在构造的时候指定Locale(Java是很笨的,我们不说他怎么知道呢?)告诉他我们现在要处理的是英文的格式串
Locale locale = Locale.US;
String dateStr = "17/Mar/2003 11:30:51";
SimpleDateFormat frm = new SimpleDateFormat("dd/MMM/yyyy HH:mm:ss", locale);
Date date = frm.parse(dateStr);
SimpleDateFormat frm1 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss", locale);
System.out.println("reformat : " + frm1.format(date));
程序正常了……
问题主要就是出在我们在不同环境底下对一些国际化处理上面的不小心或者容易忽略的地方
分享到:
相关推荐
日期操作。。。基础的SimpleDateFormat格式化日期!!操作!》初级学习代码
1.创建SimpleDateFormat对象,确定日期被格式化的格式 2.使用循环,在循环中调用Thread的sleep方法,让线程休眠1s后打印当前时间的字符串
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); date.setTime(time); System.out.println(sdf.format(date)); 发现时间于想要的时间不符,请运行Time.reg文件
获取SimpleDateFormat 获取日期中的某数值。如获取月份 增加日期中某类型的某数值。如增加日期 获取精确的日期 判断字符串是否为日期字符串 获取日期字符串的日期风格。失敗返回null。 将日期字符串转化为...
主要介绍了Java中SimpleDateFormat日期格式转换详解及代码示例,具有一定借鉴价值,需要的朋友可以参考下。
主要为大家详细介绍了Java SimpleDateFormat中英文时间格式化转换,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
深入理解Java:SimpleDateFormat安全的时间格式化
目录SimpleDateFormat诡异bug复现SimpleDateFormat诡异bug字符串日期转Date日期(parse)Date日期转String类型(format)SimpleDateFormat出现bug的原因如何解决SimpleDateFormat多线程安全问题局部变量使用...
用于以iso8601格式处理日期的实用程序方法。 这比使用SimpleDateFormat要快得多,GC方便,如果(无)序列化大量日期对象非常适合。
特别适用于需要在Java项目中处理日期时间相关逻辑的人群。 使用场景 1、日期时间计算:本源码资源提供了丰富的示例代码,帮助用户学习如何在Java中进行日期时间的计算,包括日期加减、格式化、解析等操作。 2、时区...
JavaScript实现的java.text.SimpleDateFormat。希望多多交流。
DateFormat其本身是一个抽象类,SimpleDateFormat 类是DateFormat类的子类,一般情况下来讲DateFormat类很少会直接使用,而都使用SimpleDateFormat类完成,下面我们具体来看一下两个类的用法:
主要介绍了java SimpleDateFormat使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
检查日期格式字符串是否能转化成日期,字符串可通过new SimpleDateFormat("xxxx");得到日期字符串
SimpleDateFormat里面对应格式化输出的模式字母
有关SimpleDateFormat的常用方法说明
NULL 博文链接:https://chaoyi.iteye.com/blog/2082317
java中关于日期处理的总结,包含各种日期格式之间的转java.util.Date(已经不提倡使用,该类的方法比较少) java.util.Calendar(抽象类) java.util.GregorianCalendar(是Calendar的子类,日期处理时候经常使用该类)****...
由浅入深解析 SimpleDateFormat 由浅入深解析 SimpleDateFormat
日期操作是日常开发当中最常见的操作之...和字符串类型之间的转换,但是在jdk1.8之后有所改善,jdk1.7以及之前的版本处理日期类型并不方便, 可以借助Joda Time组件来处理,尤其是日期类型的一些数学操作就更是不方便。