0

我正在尝试将作为字符串结果集的日期格式从数据库转换为标准格式,但使用 simpledateformat 会出现以下错误:

Exception in thread "main" java.lang.IllegalArgumentException: Cannot format given Object as a Date
at java.text.DateFormat.format(Unknown Source)
at java.text.Format.format(Unknown Source)
at CopyEJ.CopyEJ.main(CopyEJ.java:113)

RROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2
JDWP exit error AGENT_ERROR_NO_JNI_ENV(183):  [../../../src/share/back/util.c:838]

通过调试,我发现变量 time_stmp 的值“2013-04-19 17:29:06”我想转换为:

yyyyMMddhhmmss

这是代码:

SimpleDateFormat df = new SimpleDateFormat("yyyyMMddhhmmss");

        ResultSet rs_dt = cmd1.executeQuery(dt);

        String time_stmp = null;

        while (rs_dt.next())
        {
            time_stmp = rs_dt.getString(1);
        }

        StringBuilder ts = new StringBuilder( df.format( time_stmp ) );

实现这一目标的最佳方法是什么?

4

7 回答 7

1

您需要在DateFormat.parse()此处使用,因为参数类型为String. DateFormat.format()另一方面用于将Date对象格式化为String.

StringBuilder ts = new StringBuilder(df.format(df.parse(time_stmp)));

此外,建议将日期/时间数据保存为TimeStamp数据库中的而不是String.

于 2013-06-26T05:39:25.590 回答
1

您的 Simple DateFormat 有错误的日期模式。您必须使用 DB 的模式对其进行解析,然后将其解析回String. 试试这种方式:

    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

    ResultSet rs_dt = cmd1.executeQuery(dt);

    String time_stmp = null;

    while (rs_dt.next())
    {
       time_stmp = rs_dt.getString(1);
    }
    Date d = null;
    try {
       Date d = df.parse(time_stmp);
    } catch (ParseException ex) {
        Logger.getLogger(Prime.class.getName()).log(Level.SEVERE, null, ex);
    }
    SimpleDateFormat df2 = new SimpleDateFormat("yyyyMMddhhmmss");

    StringBuilder ts = new StringBuilder( df2.format(d) );

顺便说一句:
如果你希望你的输出是 24 小时格式,那么你必须使用模式yyyyMMddHHmmss

于 2013-06-26T05:43:18.807 回答
1

问题是,从 DB 检索到的日期格式是,yyyy-dd-MM HH:mm:ss并且您正在尝试使用格式对其进行解析yyyyMMddhhmmss

你可以做这样的事情

    String date = "2013-04-19 17:29:06";
    Date d = new SimpleDateFormat("yyyy-dd-MM HH:mm:ss").parse(date);
    SimpleDateFormat outputFormat = new SimpleDateFormat("yyyyMMddhhmmss");
    System.out.println(outputFormat.format(d));
于 2013-06-26T05:43:26.260 回答
0

嗨,您可以使用以下代码来格式化您选择的日期(例如:yyyy-MM-dd HH:mm:ss)

        Calendar calendar = Calendar.getInstance();
        Date calDate = calendar.getInstance().getTime();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("Calendar Date: " + calDate);
        System.out.println("Your Choice Date format (yyyy-MM-dd HH:mm:ss): "+dateFormat.format(calDate));
于 2013-06-26T05:53:49.823 回答
0

这将起作用

    SimpleDateFormat df = new SimpleDateFormat("YYYY-MM-dd hhhh:mm:ss");
    String time_stmp ="2013-04-19 17:29:06";
    Date date=df.parse(time_stmp);
    StringBuilder ts = new StringBuilder( df.format( date ) );
    System.out.println(ts);
于 2013-06-26T05:54:18.913 回答
0

用于SimpleDateFormat.parse()String 转换为 Date

用于SimpleDateFormat.format()Date 转换为 String

现在都在一起了:

SimpleDateFormat dbFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat stdFormat = new SimpleDateFormat("yyyyMMddhhmmss");
String s = stdFormat.format(dbFormat.parse(input));

您可以修改格式以满足您的需要。

于 2013-06-26T05:40:24.723 回答
0

就像提到你需要使用

SimpleDateFormat.parse()

此外,如果您的字符串采用以下形式

`2013-04-19 17:29:06`

您将需要构建您的 SimpleDateFormat 以便像这样读取

`yyyy-MM-dd HH:mm:ss` //make sure you use uppercase H for 24 hour times
于 2013-06-26T05:45:56.200 回答