2010-07-06 72 views
2

你好,我试图用SimpleDateFormatter来解析日期Wed, 30 Jun 2010 15:07:06 CSTSimpleDateFormatter不会解析!

我使用下面的代码

public static SimpleDateFormat postedformat = 
    new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z"); 
Date newDate = new Date(posteformat.parse("Wed, 30 Jun 2010 15:07:06 CST")); 

,但我得到一个IllegalArgumentException。请帮忙!

+0

哪一行是你得到IllegalArgumentException? – 2010-07-06 08:24:24

+0

获取解析调用的异常 – schwiz 2010-07-06 08:28:04

+2

顺便说一句:不要使用SimpleDateFormat作为常量。由于SimpleDateFormat的设计问题,它不能一次由多个线程安全使用。避免此问题最安全的方法是在需要使用SimpleDateFormat时始终创建一个新实例。 – 2010-07-06 08:36:51

回答

4

postedformat.parse()返回一个Date,并且没有Date(Date)的构造函数。

想必删除调用new Date,所以你说Date newDate = poste....就足够了

+0

...如果是这样,你只需要在解析表达式后添加.getTime()以便使用构造函数new Date(Long)。 – vlood 2010-07-06 08:38:35

+0

好抓!解析结果已经是一个Date对象。但后来我期望编译时错误,而不是运行时问题。可能是问题中的拼写错误。 – 2010-07-06 08:38:47

+0

这是问题的感谢 – schwiz 2010-07-06 08:40:46

3

您的代码片段不编译。这一细小的改动成功地编译和解析:

public static void main(String[] args) throws ParseException { 
    SimpleDateFormat postedformat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z"); 
    Date newDate = postedformat.parse("Wed, 30 Jun 2010 15:07:06 CST"); 
    System.out.println("newDate = " + newDate); 
} 

这是Mac OS X上使用Java 6

1

没有java.util.Date()构造函数,一个java.util.Date作为参数

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

public class DateFormat { 
    public static SimpleDateFormat postedformat = 
     new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z"); 
    public static void main(String[] args) { 
     try { 
      Date newDate = postedformat.parse("Wed, 30 Jun 2010 15:07:06 CST"); 
      System.out.println("Date: " + newDate); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

输出:

Date: Wed Jun 30 22:07:06 BST 2010 
+0

但你应该不能用'new Date(new Date())编译''' – 2010-07-06 08:42:47

1

javadoc示例显示了unescap ed逗号,但美国的区域设置。因此,无论尝试逃避逗号(亚伦建议),或使用其他构造和设置区域设置:

new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.US); 

另一个问题可能是这是对过时的手,ambigious上的时区(“CST”)其他(根据java.util.TimeZone的javadoc)。测试,如果它没有时区属性(格式为字符串和值)。