日期:2014-05-17  浏览次数:20798 次

java 能不能找到一个方法格式化日期 转变传来的字符串(未知格式)
String pattern="yyyy-MM-dd HH:mm:ss";
String pattern1="yyyy-MM-dd";
String pattern2="yy-MM-dd";

   
  传来一个日期字符串可能是: String dataStr="2008-9-6"; 

  String dataStr="2008-9-6 34:4:5";

  String dataStr="08-9-6";

  我要将其格式化为日期,哪位兄弟有好的方法共享一下...


  谢过..

------解决方案--------------------
倒是可以用try catch来做这个问题, 先用第一个pattern,当抛出exception就试第二个,但我觉得这样做没多大好处.
传入日期字符串的行为可以看作一个客户端的行为, 解析日期的行为可以看作是服务端的行为.在服务端没有和客户端搞好协调的情况下, 服务端就去揣测客户端的意思,
这岂不是有点违背设计思想?
只要客户端发送的字符串不符合我服务端的要求, 我就可以拒绝. 这才是个好的设计.
------解决方案--------------------
如果只有这三种情况的话,是否可以这样做呢?

1. String pattern="yyyy-MM-dd HH:mm:ss"; 
2. String pattern1="yyyy-MM-dd"; 
3. String pattern2="yy-MM-dd"; 

先 indexOf("-") 看看为 2 还是为 4?如果为 2 的话,使用 3 来转换。
如果为 4 的话,再 indexOf(" ") 看看是否为 -1,是的话,使用 2 来转换,
否则采用 1。

我暂时只能想到这个办法,呵呵 :)
------解决方案--------------------
如果格式未知,基本上是不可能的.比如:
09-08-07,到底是09年8月7日呢?还是07年8月9日呢?
需求上应该不存在LZ所说这种格式不定的情况,作为软件提供商,我们也是有权力向客户提出一定要求的.至于约束,可以直接在界面上使用JS的日期选择控件来约束客户输入的格式以及范围.
------解决方案--------------------
我只提供一个思路,具体的代码你自己实现

你已经有了日期格式,那么建立对应的正则判断。

如果日期符合某个正则日期要求,则用对应的SimpleDateFormat进行parse

免去了多次进行try.catch引起的资源占用。

正则比较简单,我给一个参考
String pattern="yyyy-MM-dd HH:mm:ss"; 
Pattern pattern1 = Pattern.compile("^\\d{4}-\\d{2}-\\d{2}\\s+\\d{2}:\\d{2}");


------解决方案--------------------
探讨
我只提供一个思路,具体的代码你自己实现
你已经有了日期格式,那么建立对应的正则判断。
如果日期符合某个正则日期要求,则用对应的SimpleDateFormat进行parse
免去了多次进行try.catch引起的资源占用。
正则比较简单,我给一个参考
String pattern="yyyy-MM-dd HH:mm:ss";
Pattern pattern1 = Pattern.compile("^\\d{4}-\\d{2}-\\d{2}\\s+\\d{2}:\\d{2}");