java.lang.IllegalArgumentException:无法将给定对象格式化为日期

Posted

技术标签:

【中文标题】java.lang.IllegalArgumentException:无法将给定对象格式化为日期【英文标题】:java.lang.IllegalArgumentException: Cannot format given Object as a Date 【发布时间】:2014-12-09 09:20:19 【问题描述】:

我收到这种格式的日期

2014-12-09 02:18:38

我需要把它转换成

09-12-2014 02:18:38

我试过这样转换

import java.text.ParseException;
import java.text.SimpleDateFormat;
public class TestDate 
    public static void main(String[] args) throws ParseException 
        SimpleDateFormat sdf = new SimpleDateFormat("dd-mm-YYYY HH:mm:ss");
        String input = "2014-12-09 02:18:38";
        String strDate = sdf.format(input);
        System.out.println(strDate);
    

但是我在运行时遇到了这个异常

Exception in thread "main" java.lang.IllegalArgumentException: Cannot format given Object as a Date
    at java.text.DateFormat.format(DateFormat.java:301)
    at java.text.Format.format(Format.java:157)
    at TestDate.main(TestDate.java:15)

谁能帮我解决这个问题。

【问题讨论】:

docs.oracle.com/javase/8/docs/api/java/text/… Java string to date conversion 的可能副本。此外,您应该能够通过阅读文档和谷歌搜索几分钟来自己解决诸如此类的琐碎问题。 SO 不是代码编写服务,您不应该将它用于您遇到的每一个小问题;请自己做一些研究。 【参考方案1】:

试试这个

public static void main(String[] args) throws ParseException 
    SimpleDateFormat sdfIn = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    SimpleDateFormat sdfOut = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
    String input = "2014-12-09 02:18:38";
    Date date = sdfIn.parse(input);

    System.out.println(sdfOut.format(date));

另外,请注意m 是分钟,而M 是几个月。

【讨论】:

@PreethiJain 这是一个解决方案,但我仍然强烈建议您阅读文档,以便您了解自己在做什么 我得到的输出是 29-12-2014 02:18:38,为什么 29 代替了 09? @PreethiJain 我已经更正了我的答案,应该使用yyyy 而不是YYYY【参考方案2】:

而不是

String strDate = sdf.format(input);

使用

String strDate = sdf.parse(input);

另见question

【讨论】:

谢谢,它返回给我 Sun Dec 30 02:18:38 IST 8 我怎样才能得到 09-12-2014 02:18:38 @PreethiJain 仔细阅读the docs 并注意mM 之间的区别。事实上 - 看看你的模式,它有错误的年份和日期。 如果您查看我链接的问题有一个广泛的解释,还请阅读有关该主题的文档(可以找到它们here)【参考方案3】:
    SimpleDateFormat sdf = new SimpleDateFormat("dd-mm-YYYY HH:mm:ss");

    // String to Date:
    String input = "2014-12-09 02:18:38";
    Date date = sdf.parse(input);

    // Date to String:
    String strDate = sdf.format(date);
    System.out.println(strDate);

【讨论】:

【参考方案4】:

SimpleDateFormat in 可用于格式化 Date 对象。

首先,您必须使用您声明的 SimpleDateFormat 上的格式将字符串解析为 Data 对象。 之后,您可以使用第二个 SimpleDataFromat 将其输出到您想要的字符串。

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String input = "2014-12-09 02:18:38";
    Date dt = sdf.parse(input);

    SimpleDateFormat sdf2 = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");        
    String strDate = sdf2.format(dt);
    System.out.println(strDate);

【讨论】:

以上是关于java.lang.IllegalArgumentException:无法将给定对象格式化为日期的主要内容,如果未能解决你的问题,请参考以下文章

IllegalArgumentException:此 NavController 未知导航目的地 xxx