0

我正在尝试将类型为“Mon Jan 14 00:00:00 GMT-12:00 2013”​​的日期转换为 java.sql.Date yyyy/MM/dd 类型,我编写了以下代码。在尝试执行以下代码时,我收到“无法解析的日期”错误。请帮助我解决以下问题。

        DateFormat df = new SimpleDateFormat("yyyy/MM/dd");
     try{
               java.sql.Date xdate=new java.sql.Date(df.parse("Mon Jan 14 00:00:00 GMT-12:00 2013").getTime());
System.out.println(xdate.toString());

            }catch(Exception x)
            {
                System.out.println(x.getMessage());
            }
4

5 回答 5

3

与其他答案一样,您使用错误的模式来解析您获得的日期字符串。

实际上,您将需要该模式,但要将Date对象转换为所需的模式。但首先您需要获取Date给定日期字符串的对象。为此,您需要构建与您拥有的字符串完全匹配的模式。

日期格式有两个方面:-

  • 解析- 日期字符串到日期对象
  • 格式化- 将日期对象格式化为日期字符串

因此,您首先需要使用DateFormat#parse(),然后DateFormat#format()使用不同的模式。

因此,这是您需要的代码:-

String fromDate = "Mon Jan 14 00:00:00 GMT-12:00 2013";
Date date = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy").parse(fromDate);

java.sql.Date toDate = new java.sql.Date(date.getTime());

System.out.println(new SimpleDateFormat("yyyy/MM/dd").format(toDate));
于 2013-01-16T18:22:02.393 回答
1

你正在使用

new SimpleDateFormat("yyyy/MM/dd")

因此yyyy/MM/dd,在尝试以格式解析日期时,Mon Jan 14 00:00:00 GMT-12:00 2013 将您要解析的日期字符串转换为yyyy/MM/dd格式,它将被解析。

于 2013-01-16T18:11:06.250 回答
1

好吧,您提供的日期不是您提供的格式。您有一个 ISO 字符串作为参数,但您的格式化程序需要“yyyy/MM/dd”。你为什么期望这会起作用?

于 2013-01-16T18:11:06.560 回答
1

您需要以下简单日期格式

DateFormat df = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");

更多日期和时间模式: 简单日期格式

于 2013-01-16T18:13:38.553 回答
0

尝试

DateFormat df = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyyy", Locale.US);

如果您的本地语言不是英语并且您要解析Mon和.Locale.US 是必需的Jan。日期解析器可能是语言敏感的,就像我们的例子一样

于 2013-01-16T18:27:37.557 回答