2010-10-06 65 views
1

我收到日期如下格式,如Java字符串:Java的日期错误

周六1月1日00:00:00 CET 2000

我想将其转换为YYYY-MM-DD fromat。对于这个我做:

String strDate = "Sat Jan 01 00:00:00 CET 2001"; 
SimpleDateFormat sdf = new SimpleDateFormat ("yyyy-MM-dd"); 
try{ 
Date parsed = sdf.parse(strDate); 
}catch(Exception e){ 
System.out.println("Exception: " + e.getMessage()); 
} 

但我得到异常: 无法解析的日期:“星期六1月1日00:00:00 CET 2001年”

请给我一些这方面的解决方案。

谢谢

+0

如果你的语言环境是不是美国,看到我的答案:) – Fortega 2010-10-06 13:44:36

回答

8

SimpleDateFormat的需要是输入日期格式,那么你可以使用其他的SimpleDateFormat能得到相应的输出格式,即:

String strDate = "Sat Jan 01 00:00:00 CET 2001"; 
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy"); 
SimpleDateFormat outputDate = new SimpleDateFormat("yyyy-MM-dd"); 
try{ 
    Date parsed = sdf.parse(strDate); 
} 
catch(Exception e){ 
    System.out.println("Exception: " + e.getMessage()); 
} 
System.out.println("Date: " + outputDate.format(parsed)); 
+0

嗨,弦乐临时=“星期六1月1 00:00:00 CET 2000“; SimpleDateFormat sdf = new SimpleDateFormat(“EEE MMM dd HH:mm:ss zzz yyyy”); SimpleDateFormat outputDate = new SimpleDateFormat(“yyyy-MM-dd”); Date parsed = null; try { \t parsed = sdf.parse(temp); (例外e){ } catch(Exception e){0} {0} {0} System.out.println(“Exception:”+ e.getMessage()); } System.out.println(“Date:”+ outputDate.format(parsed)); – 2010-10-06 11:45:44

+0

我认为我的编辑必须通过你的评论,像在晚上船舶;) – Lazarus 2010-10-06 11:46:59

+0

抱歉worng格式。我根据您的代码进行了更改,但我仍然得到异常 – 2010-10-06 11:50:34

4

您正在尝试用格式“yyyy-MM-dd”解析日期。

您需要构建一个与您需要解析的格式相匹配的SimpleDateFormat,然后在您的代码片段中使用它来编写format它。

你需要将沿着 “EEE MMM DD HH:MM:SSžYYYY” 东西线的解析格式。

4

你需要一个SimpleDateFormat解析现有的字符串,另一个的SimpleDateFormat到格式解析Date对象到适当的YYYY-MM-DD字符串。

您可以使用applyPattern更改SimpleDateFormat中的当前模式,以便您不必创建新对象。

我会留下模式作为学生的练习。

1

您的模式需要与解析日期相匹配,如下所示: 请查看SimpleDateFormat文档了解完整说明。您使用的

SimpleDateFormat sdf = new SimpleDateFormat ("EEE MMM dd hh:mm:ss zzz yyyy"); 
0

什么Date类?如果您使用的是IDE,很容易意外地使用java.sql.Date而不是java.util.Date。这里是我完整的示例程序和它的输出:

package pkg; 

import java.lang.String; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

public class Foo 
{ 
    public static void main(String[] args) throws Exception 
    { 
     Date parsed = null; 
     String strDate = "Sat Jan 01 00:00:00 CET 2001"; 
     SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy"); 
     SimpleDateFormat outputDate = new SimpleDateFormat("yyyy-MM-dd"); 
     try{ 
      parsed = sdf.parse(strDate); 
     } 
     catch(Exception e){ 
      System.out.println("Exception: " + e.getMessage()); 
     } 
     System.out.println("Date: " + outputDate.format(parsed)); 
    } 
} 

生产

日期:2000-12-31

这是正确的,因为我在美国东部时间,除非我我错了CET的位置。没有遇到任何例外的解析类型或其他。

1

如果你的locale是不是美国或其他英语语言环境,你会得到一个例外,因为星期六是不知道的,所以你应该指定你的输入格式的语言环境。

试试这个:

String dateAsString = "Sat Jan 01 00:00:00 CET 2001"; 
SimpleDateFormat inputFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.US); 
SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd"); 
System.out.println("Date: " + outputFormat.format(inputFormat.parse(dateAsString))); 

PS:2001年1月1日是不是一个周六:)